5

为什么我可以doStuff()在下面的 main 方法中访问 Method?由于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?
    }
}
4

2 回答 2

12

看起来MyProgram类与您的AbstractTestClass. 如果是这样,那么它可以访问protectedpublic同一个包中的类的成员。

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移至另一个包。其他相关类也类似。

更多信息:

于 2013-10-06T15:36:11.363 回答
3

在 Java 中,关键字protected不仅包括来自子类的访问,而且实际上包括整个包的访问。没有办法阻止这种情况。

于 2013-10-06T15:36:58.557 回答