1

如何在主方法中访问 A 类的打印方法?在 main 方法中创建的对象 a 和 b 之间的区别?

  abstract class A {
        void print() {
            System.out.println("A");
        }
    }

    class B extends A {
        void print() {
        System.out.println("B");
        }
    }



    public class test {
        public static void main(String[] args) {
            B b = new B();
            A a = new B();
            b.print();
            a.print();
        }

    }
4

3 回答 3

0

如何在主方法中访问 A 类的打印方法?

你不能,因为你没有一个实例A,只有一个B,它已经覆盖了该方法。

在 main 方法中创建的对象 a 和 b 之间的区别?

它们是不同的实例B

于 2013-02-08T09:23:16.487 回答
0

要么将 a 初始化为 new A(),而不是 new B(),

或者

向 B 添加一个方法,例如 printA()

无效 printA() { super.print(); }

于 2013-02-08T09:25:11.507 回答
0

在这两种情况下,都会调用overriden print()in 。class B

情况1: B b = new B();

这个案子很简单。您使用 B 引用创建 B 对象。

案例2: A a = new B();

在这里,您正在B object使用A reference. 这称为多态地创建对象或coding to an interface. 正如您在 中重写 print()的那样class B,在运行时重载的方法class B将被调用。

其他选项:

在 B 类中创建一个方法,该方法将使用 super 关键字调用 A 类的打印方法。

   class B extends A {
        public void someOtherMethod(){
            super.print();
         }
    }
   from main:
      B  b = new B();
      b.someOthermethod();
于 2013-02-08T09:25:14.010 回答