为什么我可以在下面的主要方法中访问doStuff()
方法?由于doStuff()
受到保护,我希望只有TestClassImplementation
才能访问它。
public abstract class AbstractTestClass {
protected void doStuff()
{
System.out.println("doing stuff ...");
}
}
public class TestClassImplementation extends AbstractTestClass{
}
public class MyProgram {
public static void main(String[] args) {
TestClassImplementation test = new TestClassImplementation();
test.doStuff(); //why can I access the doStuff() Method here?
}
}
答案 0 :(得分:11)
看起来MyProgram
类与AbstractTestClass
的同一个包中。如果是这样,那么它可以访问同一包中类的protected
和public
成员。
Java教程中涵盖:
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
为了修复,只需将AbstractTestClass
移到另一个包中即可。与其他相关课程相似。
更多信息:
答案 1 :(得分:3)
在Java中,关键字protected
不仅包括从子类的访问,还包括整个包的访问。没有办法阻止这种情况。