关于Java中此引用的问题

时间:2011-05-31 11:04:47

标签: 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 个答案:

答案 0 :(得分:3)

  1. 由于运行时多态性,您会得到“我在B中”,或者在Java术语中,B中的print()方法会覆盖A中的print()方法。
  2. 理想情况下,绝不应该从基类构造函数调用非最终类的非私有方法。对于例如在你的情况下,B的print()从A的构造函数调用,但B尚未初始化,在你的情况下是好的,但如果它使用了未初始化的字段,那么....

答案 1 :(得分:1)

与c ++不同,即使从超类构造函数调用,也会调用重写方法。

答案 2 :(得分:0)

这是多态性。所以你在A中运行一个实例iniatilizer来调用print方法。由于类型实际上是B,因此它是针对B执行的方法。

答案 3 :(得分:0)

  

我的问题是超级内部如何   类构造函数我们能够   访问子类方法

我不确定我理解你的问题......但是如果你想从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 :(得分:0)

this指的是调用该方法的对象。因此它指的是B类对象。您可以参考以下链接:

http://www.cs.utexas.edu/~lavender/courses/tutorial/java-05.pdf