面向对象(三大特性:封装,继承,多态)
-
封装
-
继承
-
java是单继承,一个类只能继承一个父类
-
子类继承了父类除了构造方法以外的实例成员和类方法,实例变量和类变量
-
子类不能继承父类的构造方法
-
子类可以重新声明父类的成员方法
-
子类虽然继承了父类的成员变量和成员方法,但并不是对父类所有的成员变量和方法都具有访问权限,private修饰成员的则不能访问
-
super和this
-
调用构造方法的时候,都只能放在构造方法的第一行
-
在同一个构造方法中,super和this不能共存
-
都不能在static修饰的成员方法或者是静态块中使用
-
-
继承中构造方法的调用次序
-
实例化子类对象时,先调用子类构造方法,然后调用父类的构造方法。
-
父类构造方法为属性初始化后,子类再为子类属性初始化。
-
-
里氏替换原则:只要父类能出现的地方都可以使用其子类来代替。
-
向上转型
-
子类向父类转换,是自动转换
-
格式:<父类类型> <引用变量名> = new <子类类型>;
-
例如:Pet pet=new Dog();
-
-
向下转型
-
父类向子类转换,强制转换的
-
格式如下:Pet pet=new Dog(); Dog dog=(Dog) pet;
-
有的时候需要使用instanceof运算符判断一个对象是否属于某个类型,使用instanceof要求前面的类必须和后面的类有继承关系
-
-
-
多态
-
允许将子类类型对象的引用赋值给父类类型的变量。
-
方法重载:编译时多态
-
同一个类中,多个方法具有相同的方法名,具有不同的参数列表,即参数个数不同,参数类型不同,参数顺序不同,还与返回值无关。
-
构造方法也是可以重载
-
-
方法重写:编译时多态
-
子类重新定义了父类的同名方法,具有相同的参数列表,但具有不同的方法体
-
-
性质
-
可替换性
-
可扩充性
-
接口性
-
灵活性
-
简化性
-
-
-
抽象
-
使用abstract关键字修饰
-
abstract修饰的类不允许实例化,即不允许创建对象
-
使用abstract修饰的方法称为抽象方法,抽象方法只有方法头,没有方法体,即不能出现“{}”
-
抽象类的子类只有实现了父类中的所有的抽象方法后才允许子类实例化对象。
-
如果有任何一个抽象方法没有在子类中实现,那么这一个子类也必须是抽象类
-
抽象方法不允许使用private修饰
-
类中如果有抽象方法,那这个类一定是抽象类
-
抽象类中不一定有抽象方法,可以有,也可以没有
-
abstract和final不允许共同使用
-



