所以,我有这个:
public class A {
public int a = 0;
public void m(){
System.out.println("A"+a);
}
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
public class B extends A {
public int a = 5 ;
public void m (){
System.out.println("B"+a);
}
public static void main(String[] args) {
A oa = new A();
B ob = new B();
A oab = ob;
oa.m();
ob.m();
oab.m();
System.out.println("AA"+oa.a);
System.out.println("BB"+ob.a);
System.out.println("AB"+oab.a);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
A0
B5
B5
AA0
BB5
AB0
Run Code Online (Sandbox Code Playgroud)
我不明白为什么oab.m(); 输出是B5而不是A0.谁可以给我解释一下这个?
这就是多态性的全部要点.具体类型oab是B(因为对象是用它创建的new B()).所以B.m()调用该方法.
查看http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29中的Animal示例,了解它为何有用.当你有一只动物,而这只动物是一只猫时,你会期待它说"喵!" 当你说话的时候.