为什么我在子类中创建超类的引用时,只能从引用调用公共方法而不能调用受保护的方法?(这两个类在不同的包中)
我的问题是为什么 d.bark() 不能编译?bark方法的访问修饰符是 protected,这使它可以从同一包中的类或子类中访问。那么出了什么问题呢?
如果husky引用能够访问bark方法,按照同样的逻辑,dog引用也应该能够访问bark方法。
所以我只能假设存在Dog引用的问题?
package pet;
public class Dog {
protected void bark(){};
void jump(){};
public void lick(){};
}
package other;
import pet.*;
public class Husky extends Dog {
public static void main(String[] args){
Husky h = new Husky();
h.bark(); //COMPILES (Husky is a subclass of Dog - Protected method)
h.jump(); //DOES NOT COMPILE (Different packages - package-private access method)
Dog d = new Dog();
d.bark(); //DOES NOT COMPILE WHY?
d.jump(); //DOES NOT COMPILE (Different packages - package-private access method)
d.lick(); //COMPILES (Method is public)
}
}
我的问题是为什么 d.bark() 不能编译?bark方法的访问修饰符是 protected,这使它可以从同一包中的类或子类中访问。那么出了什么问题呢?
如果husky引用能够访问bark方法,按照同样的逻辑,dog引用也应该能够访问bark方法。
所以我只能假设存在Dog引用的问题?
protected
的访问规则(请参见我的总结),但我们还需要找到相应的理由。 - ZhongYu