Java语言是面向对象的一门语言,那么对象(人)可能会比较懒、会犯错,而且人与人是不同的,这就体现了我们的Java语言的三大特性:
继承、封装、多态
那么今天来总结一下封装.
一、什么是封装
封装就是对类的属性不可见,将类的信息隐藏在类的内部,不允许外部程序直接访问,
但是对外提供了访问的接口或者方法.
二、有什么好处
好处就是:
a.可以避免用户程序误操作类的信息,防止程序出错
b.方便用户,只需要知道怎么使用即可,并不关心具体的实现细节
c.方便管理和实现,易于维护
三、封装有哪些步骤
a.将类的属性改为private
b.对外提供访问的接口----》setter/getter方法
c.在setter/getter方法中控制其合法性
封装的时候类名冲突了解决的办法是包管理,使用不同的包对同名的类进行封装
封装之访问修饰符
修饰符 | 同类 | 同包 | 子类 | 所有文件 |
---|---|---|---|---|
private | 可以 | |||
缺省 | 可以 | 可以 | ||
protected | 可以 | 可以 | 可以 | |
public | 可以 | 可以 | 可以 | 可以 |
封装对象属性之this关键字**
this 关键字代表当前对象
this.属性代表当前对象的属性
this.方法代表当前对象的方法
作用----------->在设置属性的值时为了区分属性和参数可以在属性前加上this关键字
当没有this关键字代表当前对象的时候,系统便不知道该把这个参数赋给哪个变量,会认为当前的属性只是一个普通的属性
虽然给属性赋了值2、3,但是结果中却没有A的值
封装之内部类
内部类就是在类中又定义了一个类,反过来包含内部类的类为外部类.
内部类是为了更好的实现封装,不被同一个包中的其他类所使用
内部类分为四类:
成员内部类、静态内部类、方法内部类、匿名内部类
a. 成员内部类
成员内部类是普通内部类,相当于类中的成员变量
从上述的代码可以看出,成员内部类的一些时使用方法:
1)定义的内部类可以使用任何的修饰符
2)内部类可以使用外部类的数据,不受修饰符的控制
3)要想访问内部类,必须使用外部类的对象来创建内部类的对象来访问,如new Outer().new Inner().方法/属性
- 编译后会产生两个.class文件
Hello.class
Hello$Inner.class
- 外部类想要访问内部类的数据,不能直接访问,须创建一个内部的对象访问
- 如果内部类和外部类的成员变量相同,内部类访问默认是内部类的成员变量,如果想要访问外部类的成员变量,则需要用到this 关键字
这里有一个问题就是为什么内部类会有外部类的对象的引用???
我搜了一下,大概是因为编译器在内部类的构造方法中添加了外部类的引用作为参数,具体的请参照http://www.2cto.com/kf/201402/281879.html ,讲解的非常清楚.
b.静态内部类
静态内部类和静态方法大概相同
下面将会总结一些静态内部类的用法:
1)静态内部类中不能直接访问外部类的普通变量,可以使用外部类的对象访问,如下图
2)静态内部类中可以直接访问外部类的静态变量,当内、外部类的静态变量相同时可以使用外部类访问外部类的静态变量,如下图
- 静态内部类的对象可以直接用内部类创建
c.方法内部类
方法内部类是定义在外部类的方法中的类,只能在该方法中使用,因此方法内部类不需要使用访问控制符和static 修饰
d.匿名内部类
匿名内部类见名知意,就是没有名字的类,那么它是怎么实现的呢
匿名内部类的实现如上图所示,匿名类的实现有一个前提:必须继承一个父类或者实现一个接口
这样写直接实现了父类,不用再去继承父类,从而少写一个类名.
匿名内部类还可以用于实现接口,用法同继承父类相同.
作用-------->只要一个类是抽象的或者是一个接口,都可以利用匿名内部类来实现
多用于多线程Thread或者Runnable.
这是参考的大神的,具体请参考:http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html.
以上便是参考各种资料+向大神学习之后总结出来的关于Java的封装性的知识点.可能还有什么不足,请多多指出,谢谢.