簡體   English   中英

Java 中有關此參考的問題

[英]questions about this reference in Java

我對以下程序中的這個引用有一點疑問,為什么結果是“我在 B 中”,我的問題是在超級 class 構造函數中我們如何能夠訪問子類方法。

 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();
       }
 }
  1. 由於運行時多態性或在 java 術語中,您會得到“我在 B 中”,B 中的 print() 方法會覆蓋 A 中的 print() 方法。
  2. 理想情況下,您永遠不應該從基礎 class 構造函數調用非最終類的非私有方法 例如,在您的情況下,從 A 的構造函數調用 B 的 print(),但 B 尚未初始化,在您的情況下這很好,但如果它使用未初始化的字段,那么......

與 c++ 不同,即使調用來自超級 class 構造函數,也會調用重寫方法。

這就是多態性。 因此,您正在 A 中運行一個調用 print 方法的實例初始化程序。 由於類型實際上是 B 它是針對 B 執行的方法。

我的問題是在超級 class 構造函數中我們如何能夠訪問子類方法

我不確定我是否理解您的問題...但是如果您想從 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();
       }
 }

this是指調用該方法的object。 因此它指的是 class B object。 您可以參考以下鏈接:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM