繁体   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