public成员可被任何类访问,protected仅限同类、同包或子类继承访问,跨包非子类不可访问。
public 和 protected 是 Java 中的两个访问修饰符,它们控制类成员(字段、方法、构造器等)的可见范围。主要区别在于访问权限的宽窄和适用场景。
com.example.Parent:
package com.example;
public class Parent {
public void doPublic() { }
protected void doProtected() { }
}
在另一个包 com.test 中有一个子类:
package com.test;
import com.example.Parent;
public class Child extends Parent {
public void test() {
d
oPublic(); // 可以访问,public 允许
doProtected(); // 可以访问,因为是子类
}
}
但在 com.test 中一个不相关的类:
package com.test;
public class Unrelated {
public void test() {
Child child = new Child();
child.doPublic(); // 可以访问
child.doProtected(); // 编译错误!即使在同一包也不行(Child 继承了但外部调用受限)
}
}
注意:虽然 Unrelated 和 Child 在同一包,但 doProtected() 是从父类继承来的,且不在同一个包中定义,所以不能直接通过对象调用。