首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

问一道关于java继承与多态有关问题,入门有关问题,但就是搞不懂

2012-05-16 
问一道关于java继承与多态问题,入门问题,但就是搞不懂。class A{void m1(){System.out.println(As m1,)

问一道关于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,");
多态是指父类的引用可以指向子类的对象!

热点排行