有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

关于Java中此引用的问题

我对以下程序中的引用有点怀疑,为什么结果是“我在B中”,我的问题是我们在超类构造函数中是怎样的 能够访问子类方法

 class A {

      A()
      {this.print();}

      public void print(){    
        System.out.println("I am in class A");
      }
}

class B extends A {

       public void print() {
         System.out.println("I am in class B");
       }

       public static void main(String args[]) {
         new Stest();
       }
 }

共 (5) 个答案

  1. # 1 楼答案

    不同于C++,<强>重写< /St>方法被调用,即使调用是由超级类构造函数制作的。

  2. # 3 楼答案

    1. 因为运行时多态性,或者用java术语来说,B中的print()方法会覆盖A中的print()方法,所以会得到“我在B中”
    2. 理想情况下,永远不要从基类构造函数调用非final类的非私有方法。例如,在您的情况下,B的print()从A的构造函数中调用,但B尚未初始化,这在您的情况下是可以的,但如果它使用未初始化的字段,则
  3. # 4 楼答案

    my question is how inside the super class constructor we are able to access the subclass method

    我不确定我是否理解你的问题。。。但是如果您想从B调用A的print()方法,可以使用“super”关键字

    class B extends A {
           B() { super.print(); }
    
           public void print() {
             System.out.println("I am in class B");
           }
    
           public static void main(String args[]) {
             new Stest();
           }
     }
    
  4. # 5 楼答案

    这是多态性。因此,您正在中运行一个实例iniatilizer,该实例调用print方法。因为类型实际上是B,所以它是针对B执行的方法