抽象类 - 为什么我的受保护方法可公开访问?

时间:2013-10-06 15:32:57

标签: java

为什么我可以在下面的主要方法中访问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?
    }
}

2 个答案:

答案 0 :(得分:11)

看起来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移到另一个包中即可。与其他相关课程相似。

更多信息:

答案 1 :(得分:3)

在Java中,关键字protected不仅包括从子类的访问,还包括整个包的访问。没有办法阻止这种情况。