public,protected,private是Java里用来定义成员的访问权限的,另外还有一种是“default”,也就是在成员前不加任何权限修饰符。如:
public class A{
void method(){};
}
method就属于default权限。
这四个修饰符的访问权限如下表:
-----------------------------------------------
类内部 package内 子类 其他
public 允许 允许 允许 允许
protected 允许 允许 允许 不允许
default 允许 允许 不允许 不允许
private 允许 不允许 不允许 不允许
-----------------------------------------------
比如:用protected修饰的成员(变量或方法),在类内部可以调用,同一个package下的其他类也可以调用,子类里也可以调用,其他地方则不可以调用
错误例子
package java1;
public class TestBase
{
protected void printProtected()
{
System.out.println("printProtected!");
}
}
import java1.TestBase;
class Child extends TestBase
{
protected void printProtected()
{
System.out.println("child printProtected!");
}
public static void main(String[] args)
{
TestBase base= new Child();
base.printProtected(); //编译报错
}
}
Java代码
1 TestBase base= new Child();
2 base.printProtected(); //编译报错
这个会出错,是因为你在不同包里访问TestBase声明的printProtected方法,所以不行,你可以在你子类的printProtected通过super来访问父类的方法。
可以这样解释吧,子类可以继承父类的protected方法,并且在子类内部是可以访问的(就是在子类里调用this.printProtected(),或者super.printProtected())。但是这个方法对于子类来说也是protected的。
protected的含义就是本类可以访问,同一包内的可以访问,子类可以访问。
<!--EndFragment-->