继承的好处:
1 减少代码冗余
2 便于功能的扩展
3 为多态的使用提供了前提
super关键字
我们可以在子类的方法或构造器中。通过使用"super."调用父类的属性方法构造器,但通常省略"super."但当子类和父类属性或者方法重名的时候,必须显式的使用super.。
super调用构造器
this()和super()调用构造器在同一个构造方法中只能出现一个
在类的多个构造器中,至少有一个类使用了super(),调用父类中的构造器
未显示的使用this和super默认调用空参super()。
没有super.super
重写:
子类重写的方法名和形参列表与父类被重写的方法的方法名和形参列表相同
子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符
1 子类不能重写父类中声明为private权限的方法
返回值类型:
1 父类被重写的党法的返回值类型是void,则子类重写的方法的返回类型只能是void
2 父类被重写的方法的返回类型是A类型,则子类重写的方法的返沪类型可以是A类或者A的子类
3 父类被重写的方法的返回类型是基本数据类型,则子类重写的方法的返回类型必须是相同的返回类型
子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的返回类型
子类和父类中的同名参数要么都声名为非static的,要么都声明为static的(不是重写)
静态方法不能被覆盖,随着类的加载而加载
父类的成员方法只能被它的子类重写。
5、声明为final的方法不能被重写。
6、声明为static的方法不能被重写,但是能够被再次声明。
7、子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
8、子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
9、重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常。
10、构造方法不能被重写。
11、如果不能继承一个方法,则不能重写这个方法。
多态
对象的多态性:父类的引用指向子类的对象
多态的使用:当调用子父类同参数的方法时,实际执行的是子类重写后的方法。(虚拟方法调用)
只能调用声明的类型的方法。
编译看左边,运行看右边
多态使用前提:要有继承,要有方法重写
重载和重写的区别
1 概念
2 具体规则
3 多态性
向下转型
父类强转为子类称为向下转型,使用instanceof判断a是否是类A的实例,如果B是A的父类,那么也为true
子类向上转为多态即为向上转型,即为多态
使用强转时可能会出现ClassCastException的异常,因此要进行instanceof的判断