Java专家,我真诚地感谢任何见解!
我在一个带有受保护方法的包中有一个抽象类。我在同一个包中也有这个类的子类。现在,当我尝试从包外的类实例化子类时,并在子类上调用protected方法'例如,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????
}
}
答案 0 :(得分:3)
protected
访问意味着genOutputSet
可以由继承自声明它的类的类或属于同一个包的类调用。这意味着您可以在LookupTransformation
内调用它。
但是,您尝试从不相关的类Test
调用它 - 位于不同的包中,这需要public
访问权限。
请参阅其他说明here。
答案 1 :(得分:1)
您的代码不在子类中(您在测试中),而您的代码不在中 相同的包裹(你在Y)。所以这个方法不可见。这很正常。
答案 2 :(得分:1)
protected
表示您可以调用任何派生类中的方法。但是,Test
并非来自Transformation
。 genOutputSet
仅在内显示 Transformation
和LookupTransformation
。在派生类的对象上调用方法时,这并没有说明方法的可见性。
答案 3 :(得分:1)
我能给出的最好的答案就是这张照片的形式,我过去常常自己学习:
Protected
方法适用于其他inherited
中的子类(在您的情况下为packages
类)。但是,您从另一个类(而不是subclass
)调用它。希望这有帮助!