第一种:父类是普通类
Fu obj = new Zi();
第二种:父类是抽象类
Father obj = new Child();
第三种:父类是接口
Animal obj = new Dog();
二、多态的执行(编译看左边,运行看右边)
public class Fu {
int num = 5;
static void method1() {
System.out.println("fu_method_1");
}
void method2() {
System.out.println("fu_method_2");
}
}
public class Zi extends Fu {
int num = 10;
static void method1() {
System.out.println("zi_method_1");
}
void method2() {
System.out.println("zi_method_2");
}
}
public class Test {
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.num); //与父类一致
f.method1(); //与父类一致
f.method2(); //编译时与父类一致,运行时与子类一致
Zi z = new Zi();
System.out.println(z.num);
z.method1();
z.method2();
}
}
输出结果:
5
fu_method_1
zi_method_2
10
zi_method_1
zi_method_2
总结:成员变量、静态方法看左边(父类);非静态方法:编译看左边(父类),运行看右边(子类)。