簡體   English   中英

為什么受保護的方法不可見?

[英]Why is the protected method not visible?

Java專家,我將不勝感激!

我在帶有受保護方法的程序包中有一個抽象類。 我在同一包中也有此類的子類。 現在,當我嘗試從包外部的類實例化子類並在子類的實例上調用受保護的方法時,Eclipse抱怨受保護的方法不可見。

我認為,只要類的可見性不受限制,受保護的方法對所有子對象(包中或包外)都是可見的,在這種情況下,父類和子類都是公共的。 我想念什么? 提前致謝!

package X;
public abstract class Transformation {
  protected OutputSet genOutputSet (List list) {
    ..
  }
}


package X;
public class LookupTransformation extends Transformation {
}


package Y;
import X.*;
public class Test {
  public static void main(String[] args) {
    List<field> fld_list = new ArrayList();
    ..
    LookupTransformation lkpCDC = new LookupTransformation();
    OutputSet o = lkpCDC.genOutputSet(fld_list); // Eclipse errors out here saying genOutputSet from the Type Transformation is not visible. WWWWWWWWHHHHHAAAATTTTTT????
  }
}


protected訪問意味着genOutputSet可以由從聲明該類的類繼承的類或屬於同一包的類來調用。 這意味着您可以在LookupTransformation調用它。

但是,你正在試圖從一個不相關的類稱之為- Test -位於不同的包,這需要public訪問。

請參閱此處的其他說明。

您的代碼不在子類中(您正在測試中),並且代碼不在
相同的包裹(您在Y中)。 因此該方法不可見。 那很正常

protected意味着您可以在任何派生類中調用該方法。 但是, Test不是從Transformation派生的。 genOutputSet TransformationLookupTransformation 內部可見。 當在派生類的對象上調用方法時,這並不能說明方法的可見性。

我可能給出的最佳答案將是我自己用來學習的這張圖片的形式:

在此處輸入圖片說明

Protected方法也可用於其他packages子類(在您的情況下為inherited類)。 但是,您是從其他類(不是subclass )調用它的。 希望這可以幫助!

暫無
暫無

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

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