1. super关键字作用
1.1 访问父类的属性和方法(private除外)
1.2 调用父类的构造器(有参或者无参),且只能出现在构造器的第一句。
1.3 super关键字作用:
父类和子类分别初始化各自的属性,分工明确
当父类和子类中有重名的属性或方法时,super可以访问父类的属性和方法。
子类访问一个方法或者属性时,如果子类中没有,则在父类里面找,如果父类中也没有,则找父类的父类,直到所有找到Object类
2. 多态之向上转型:
父类的引用指向了子类的对象
父类名 引用名 = new 子类名();
编译类型看左边,运行类型看右边
向上转型的对象可以调用父类的成员(共有),但不能调用子类的特有成员,因为在编译阶段,能够访问哪些成员是由编译类型决定的。在运行时,如果子类和父类有重名方法,则优先调用子类方法。
3. 多态之向下转型
要求:父类引用必须指向的是当前目标类型的对象
只能强转父类的引用,不能强转父类的对象
public class super_base {
public static void main(String[] args) {
A b = new B();
B c = (B) b;
//向下转型,但要求引用b必须指向B类对象
c.f1();
//可以访问子类的所有成员
}
}
class A{
public int n = 10;
public int m = 18;
void f2() {
System.out.println("I'm A");
}
}
class B extends A {
public int n = 12;
public int l = 14;
void f2() {
System.out.println("I'm B");
}
void f1(){
System.out.println("I'm B's f1");
}
}
向下转型后可以访问子类的所有成员。