日期:2014-05-20  浏览次数:20639 次

问一道关于java继承与多态问题,入门问题,但就是搞不懂。
class A{
void m1(){
System.out.println("A's m1,");
}
void m2(){
System.out.println("A's m2,");
}
void m3(){
System.out.println("A's m3,");
  }
}
class B extends A{
void m1(){
System.out.println("B's m1,");
 }
}
class C extends B{
void m1(){
System.out.println("C's m1,");
 }
}
public class Mixed2{
public static void main(String[] args){
A a=new A();
B b=new B();
C c=new C();
A a2=new C();
a.m1();
a2.m1();
 }
}

如上,输出结果为A's m1,B's m1
java中不是有“当某个方法在子类中被覆盖过,调用这个方法时会调用覆盖过的版本。”照这么说,由于A中的m1()方法被B重写,则当有a.m1()时,应输出B's m1才对,怎么是A's m1呢?还有对于a2的输出呢?

------解决方案--------------------
A a=new A(); //a指向A类对象,a.m1当然调用A的m1方法了
A a2=new C();//a2指向C类对象,a2.m1调用C的m1,应该是输出C's m1才对


------解决方案--------------------
A a=new A();----- A 的引用a指向new A;所以a.m1是调用A类里的m1()方法;
B b=new B();
C c=new C();
A a2=new C();--------A 的引用a2 指向newC;所以a2.m1是调用C类里的m1()方法;
a.m1();-----------System.out.println("A's m1,");
a2.m1();---------System.out.println("C's m1,");
多态是指父类的引用可以指向子类的对象!