当代码这个样子的时候,(也就是说当编译类型和运行类型不同)多态就产生了.对象a具有两种类型
编译类型: 声明对象变量的类型,Animal,表示把对象看成什么类型
运行类型:对象的真实类型,Dog
public class Fu {
int num = 5;
static void method1(){
System.out.println("fu类中的method1");
}
void method2(){
System.out.println("fu类中的method2");
}
}
public class Zi extends Fu{
int num = 8 ;
static void method1(){
System.out.println("zi method1");
}
void method2(){
System.out.println("zi method2");
}
}
public class DuoTaiDemo {
public static void main(String[] args){
Fu f = new Zi();
System.out.println(f.num);//5,与父类一致
f.method1();//fu类中的method1,与父类一致
f.method2();//zi method2,编译时与父类一致,运行时与子类一致
Zi z = new Zi();
System.out.println(z.num);//8,与zi类中的method一致
z.method1();//zi method1
z.method2();//zi method2
}
}
5
fu类中的method1
zi method2
8
zi method1
zi method2