面向对象三大特性
封装
概念:属性私有化(private),提供setXXX和getXXX。
作用:保证数据的合理。
一般情况下,我们的程序设计要追求"高内聚,低耦合"
高内聚就是类的内部数据操作细节自己完成,不允许外部干涉
低耦合:仅暴漏少量的方法给外部使用。
封装的意义:
1. 提高程序的安全性,保护数据
2.隐藏代码的实现细节
3.统一接口
4.系统可维护增加了
继承
概念:类与类之间,特征和行为的赠与或获得。
满足继承关系的前提:二者必须具备is a关系。
语法:class 子类 extends 父类{}
创建子类对象 = 父类共性 + 子类独有
继承的好处:减少代码的冗余,提高代码的复用性。
继承的特点:
java只支持单继承,不支持多继承,但可以多层继承,形成集成体系结构。
子类继承了父类,就会拥有父类的所有方法
不可被继承
1.构造方法
2.private修饰的属性和方法
3.父子类不在同一个package中,使用default修饰的属性和方法
Object类
概念:在java中,所有的类都默认直接或间接继承Object类
特点:
1.所有的类要么直接继承要么间接继承。
2.所有的对象都可调用Object类中的方法。
3.Object可以作为形式参数:能够接收任意对象(引用数据类型)。
4.Object可以作为返回值类型:能够返回任意对象(引用数据类型)
super关键字
用法:
super.成员方法():表示调用父类中的成员方法
super.属性:表示调用父类的属性
super()和super(实参):表示调用父类的构造方法
注意:如果构造中没有this()或者this(实参)或者super(实参),每一个构造方法中首行都隐式存在super()。
super和this的区别
代表的对象不同:
this:本身调用者这 个对象
super:代表父类对象的应用
前提:
this:没哟继承也可以使用
super:只能在继承条件才可以使用
构造方法:
this() ; 本类的构造;
super():父类的构造!
方法的重写
重写需要有继承关系,子类重写父类的方法!
重写都是方法的重写,和属性无关
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大但不能 public>Protected>Default>private
4.抛出的异常:范围,可以被缩小,但不能扩大:ClassNotFoundException --> Exception(大)
重写,子类的方法和父类必须要一直:方法体
为什么要重写?
父类的功能子类不一定需要,或者不一定满足!
多态
多态就是方法的多态
一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多(父类,有关系的类)
概念:父类引用指向子类对象。
注: 父类引用只能调用父类中所定义的属性和方法,子类独有的属性和方法不可调用。
二者必须存在继承关系
多态中的方法覆盖:
子类覆盖父类中的方法,使用父类引用调用该方法,执行的是覆盖之后的
多态存在的条件
1. 有继承关系
2. 子类重写父类方法
3. 父类引用指向子类对象
多态的应用
场景一:父类引用应用在形式参数上,能够接收 本类类型 + 所有子类类型。
场景二:父类类型应用在返回值类型上,能够返回 本类型 + 所有子类类型。
好处:
降低耦合性
屏蔽子类间的使用差异
向上转型、向下转型
向上转型(装箱):父类引用中保存的是子类对象。
装箱:将基本类型用它们对应的引用类型包装起来
举例:Animal a = new Dog();
注:父类引用只能调用父类中的属性和方法。
向下转型(拆箱):将父类引用中所保存的真是类型强制转换为自身类型。
拆箱:将包装类型转换为基本数据类型
举例:Dog d = (Dog)a;
注:只有转换为子类真实类型,才可以调用子类中独有属性和方法。
instanceof
语法:引用 instanceof 类型
作用:判断引用中保存的真实类型是什么