抓住规则
1.创建子类实例的时候,会先构造父类的实例(调用父类的构造方法)
2.初始化顺序:先执行就地初始化,再执行代码块,再执行构造方法
从main 方法开始看
1.newZ()的时候,会先构造父类实例 进入X中执行
2.构造X实例的时候,先就地初始化,再调用构造方法,于是进入Y执行
3.执行Y的构造方法 打印Y
4.执行X的构造方法 打印X
5.父类X已经准备就绪,开始进行子类Z的初始化
6.对于Z来说也是先执行就地初始化,再调用构造方法
7.就地初始化就是进入Y执行,只需调用构造方法即可,打印Y
8.执行Z自身的构造方法,打印Z
动态绑定
如果父类中包含的方法在子类中有对应的同名同参的方法,就会进行同参绑定
JAVA中所有的类,都是之间或者间接继承 Object
如果写了某个类,没写extends,默认继承自Object
多态 是一种程序设计的思想方法,具体的语法体现,向上转型,方法重写,动态绑定
多态直观的理解“一个引用,对应到多种形态(不同类型的实例)”
多态:一个引用能表现出多种不同的形态
a.多态是封装的更进一步,让类的使用者不需要关注具体对象的类型,也能正确使用
b.方便扩展,未来如果需要新增新的子类,对于类的使用者来说影响很小
c.消灭一些分支语句,降低程序的复杂度
向下转型的场景:
有些方法只是在子类中存在,但是父类中不存在
此时使用多态的方式就无法执行到对应的子类的方法了
必须把父类引用先转回成子类的引用,然后再调用对应的方法
接口是抽象类的更进一步(比抽象类还抽象)
抽象类只是不能实例化,但是其他各个方面都和普通的类差不多
接口就更抽象了,不光不能实例化,同时也不具备类的各种特性
接口中也可以放抽象方法,这里的抽象方法不用写abstract 关键字(写或者不写都是抽象方法)
接口中不能放普通的方法 也不能放普通的属性
只能放public static final 修饰的属性
接口不能继承自其他类 但是可以继承自其他的接口
接口不能被类继承,而是被其他的类“实现”