文章目录
5、面向对象的三大特性
5.1 封装性
5.1.1 封装的基本思想
将对象的属性和行为封装起来,而将对象的属性和行为封装起来的载体是类,类通常对用户隐藏其实现的细节。
5.1.2 引入封装性的原因
(1)追求“高内聚,低耦合”
高内聚 :类的内部数据操作细节自己完成,不允许外部干涉;
低耦合 :仅对外暴露少量的方法用于使用。
(2)隐藏对象内部的复杂性,只对外公开简单的接口。
5.1.3 封装性的代码体现
- 将类的属性xxx私化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值
- 不对外暴露的私有的方法
- 单例模式(将构造器私有化)
- 如果不希望类在包外被调用,可以将类设置为缺省的。
5.2 继承性
5.2.1 继承的基本思想
使子类的对象拥有父类的全部属性和行为,同时可以增添自己的所特有的属性和行为。这样可以节省写共同具有的属性和方法代码的时间,有利于代码的复用。
5.2.2 继承的格式
class A extends B{}
//A:子类、派生类、subclass
//B:父类、超类、基类、superclass
5.2.3 继承的目的
- 减少了代码的冗余,提高了代码的复用性
- 便于功能的扩展
- 为之后多态性的使用,提供了前提
5.2.4 Java中继承性的说明
- 子类继承父类后便拥有了父类的所有属性和方法
- 父类中的private的属性或方法也被子类继承,但因封装性的原因并不能直接调用
- 一个类可以被多个子类继承
- Java中类具有单继承性(一个类只能有一个父类)
- 子父类是相对的概念
5.3 多态性
5.3.1 多态性的概念
父类的引用指向子类的对象(或子类的对象赋给父类的引用)
5.3.2 多态性的使用
使用前提:类的继承和方法的重写
使用:虚拟方法调用,在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法
5.3.3 转型
(1)使用向下转型才能调用子类特有的属性和方法
(2)向下转型需要使用强制类型转换符:()
(3)向下转型先进行instanceof的判断,避免异常
(4)a instanceof A:判断对象a是否是类A的实例