super
- 用于调用父类的原方法(而非子类中重写的方法),but需要满足封装性为前提(即子类需有调用该方法的权限)
- 在子类构造器中调用父类构造器,且super必须放于构造器首行(同调用其它构造器使用this()一样),空参的子类构造器默认调用父类构造器。
public Child() { super();//()中写形参列表,用以调用对应的父类构造器 System.out.println("Child Constructor"); } public Child() { this();//()中写形参列表,用以调用其他重载的构造器方法 System.out.println("Child Constructor"); } public Child() { //会调用父类构造器 }
方法调用,与属性访问:
- 方法调用时,坚持就近原则,先在该类中找,如找不到,再向父类找…逐层寻找;
- 属性也坚持就近原则;
- 而加了super的属性及方法,会跳过当前类,直接从父类开始找…逐层寻找;
多态
父类的引用指向子类的对象
下图中,动物包含多种(对应多个子类),通过同一个方法便可创建多种子类对象,进而调用不同子类的重写方法。

编译看左边,运行看右边(编译器认为创建的是父类对象并且调用父类的方法,实际运行时调用的是子类的方法)
- 使用多态访问属性,访问的是父类的属性(前提是父类要有此属性,并且子类有访问权限)、
- 多态情况下创建的对象无法直接调用特有的(左边引用没有的,即父类没有的)属性和方法
- but,多态情况下,可通过向下转型,再调用子类特有方法,访问子类特有的属性

向下转型前一般进行判断处理
