java一共有4中权限修饰符,分别是private、default、protected和public
private和public很好理解,default和protected不太好分清。
protected 包内所有类可见,包外有继承关系的子类可见
default表示默认,不仅本类访问,而且是同包可见。
语言描述可能理解的不够深刻,代码才是最有效的办法
这是我的包结构:
注释的代码代表不能编译,先写一个QWE类用于被继承,里面一个protected修饰的方法一个default修饰的方法
package qwe;
public class QWE {
protected void haha(){
System.out.println("haha");
}
void hehe(){
System.out.println("hehe");
}
}
package qwe;
public class ASD extends QWE{
public static void main(String[] args) {
qwe.ASD asd=new qwe.ASD();
asd.haha();
asd.hehe();
QWE qwe=new QWE();
qwe.haha();
qwe.hehe();
}
public void aa(){
haha();
hehe();
}
}
从上面代码可以看到,同包下继承,两者都可以通过子类对象和父类对象调用,子类内也可调用
package asd;
import qwe.QWE;
public class ASD extends QWE {
public static void main(String[] args) {
asd.ASD asd=new asd.ASD();
asd.haha();
// asd.hehe();
QWE qwe=new QWE();
// qwe.haha();
// qwe.hehe();
}
public void ss(){
haha();
}
}
不同包下继承,因为父类方法不是public所以都不能调用,子类对象可以调用protected修饰的方法
但是:
import asd.ASD;
public class Main {
public static void main(String[] args) {
ASD asd=new ASD();
// asd.haha();
}
}
子类对象可以在子类内调用继承来的protected方法,但是不能在其它类内调用该方法
也就是说protected修饰的方法可以在子类内部调用却不能在子类外部调用