注册 登录
编程论坛 JAVA论坛

子类、父类问题

红柚 发布于 2018-09-08 10:23, 1982 次点击
class A {
   public void print() {
      System.out.println("A");
   }
}
class B extends A {
   public void print() {
      System.out.println("B");
   }
   public static void main(String[ ] args) {
    A object = new B();
    B b = (B) object;
    b.print();
   }
}

问题是:main中,只有new A(); 然后输出结果才会是A,其他我试了下都是B。
能够给我讲解下这个过程么,我没怎么理解。
不是子类会被upcasting到父类么。
4 回复
#2
幻紫灵心2018-09-08 13:43
你的 B 里面都已经把print()重写了,调用b.print();自然是重写后的。
#3
红柚2018-09-08 13:58
回复 2楼 幻紫灵心
请问,意思就是子类将方法重写后,就算将这个子类提升为父类,调用也是重写后的方法对么。
#4
幻紫灵心2018-09-08 13:58
程序代码:
public class Ex {
    public static void main(String[] args) {
        A object = new B();
        object.print();//显示 B
        B b = (B) object;
        b.print();//显示 B
    }
}
class A {
   public void print() {
      System.out.println("A");
   }
}
class B extends A {
   public void print() {
      System.out.println("B");
   }
}

我觉得你可能想问我这个object.print(); object是A的对象,但是打印出来的是 B 。
这是java的动态绑定,有继承,有重写,则父类引用指向子类对象。new 的是谁就指向谁。
#5
红柚2018-09-08 14:01
回复 4楼 幻紫灵心
啊啊啊,谢谢
1