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

mar*_*k12 4 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?
    }
}
Run Code Online (Sandbox Code Playgroud)

Lui*_*oza 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
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,只需移动AbstractTestClass到另一个包.与其他相关课程相似.

更多信息: