一.继承
1.概念:子类继承父类,使得子类对象具有父类的属性和方法
除了private权限的都可以,构造器不能继承,但是可以在子类构造器中使用
只支持单继承,不像接口,支持多继承
2.super关键字:
- 调用父类无参构造器
- 必须放在第一行。和this关键字很像,一个代表本类对象,一个代表父类对象
- 虽然代表父类,但是归属于本类
- 在子类的无参构造器中会默认调用父类的无参构造器
- 当父类没有无参构造器时,子类会报错,此时必须显式调用父类的某一个构造器
- why必须用super()调用父类?因为必须初始化,父类构造器执行后子类才能用。
3.重写(变量隐藏和方法重写)
- 当子类继承方法时,可重写。
- 要求:方法名,参数列表,返回值都相同,但是子类权限要大于等于父类权限
4.创建对象时的初始化顺序:先父类,后子类
父类静态代码块,子类静态代码块,父类构造块,父类构造方法,子类构造块,子类构造方法
所以static中不能用super关键字。
二.多态
1.只需记住一句话:父类引用指向子类对象
Animal m=new Pig("佩奇");
2.再记住一句话:收到统一消息,作出不同响应。
比如动物都有叫的方法,小猪和小鸟叫声不同,此时它们重写了父类叫声的方法
3.多态的绑定机制
- 函数调用与函数本身的关联,以及成员访问与变量内存地址间的关系,称为绑定
- 属性有多态,方法没多态。
- 把一个方法与它所在的类关联起来,叫做方法的绑定
- 分为:前期绑定(静态绑定)和后期绑定(动态绑定)
- 静态绑定:final private static 修饰的方法和构造函数,属于父类的静态绑定,程序无需运行,无需实例化对象,就能知道这个方法的具体内容
- 动态绑定:程序运行过程中,根据具体的实例对象才能确定,即为:子类重写后的方法
- 总结:编译器:静态绑定,运行期:动态绑定
- 属性属于静态绑定,子类不能改变
4.final修饰的
- 当final修饰属性,只能赋值一次,不能被修改
- 修饰方法,不能被重写,可以被重载
- 修饰类:该类不能被继承