继承protected函数如何调用
在文件夹workplace里有一个class:
Java code
package workplace;
public class ProtectedFunc {
protected void eat(){
System.out.println("eat something");
}
}
在workplace文件夹的上一级文件夹里有1个class:
Java code
import workplace.*;
class Abc extends ProtectedFunc{
void eat(String s) {
super.eat();
System.out.println(s + "abc");
}
public static void main(String[] args) {
Abc a = new Abc();
a.eat();
ProtectedFunc p = new ProtectedFunc();
p.eat();
}
}
问: 为什么 a.eat()不报错,而p.eat()就报错啊?
错误:Abc.java:12: eat()可以在ProtectedFunc中访问protected
------解决方案--------------------protected 只能在同一包下,以及子类中可以使用。。。。
认真看下protected。。
------解决方案--------------------protected (受保护的):被protected修饰的属性和方法可以在类内部,相同的包下,以及这个类的子类所访问;
------解决方案--------------------
protected (受保护的):被protected修饰的属性和方法可以在类内部,相同的包下,以及这个类的子类所访问
问: 为什么 a.eat()不报错,而p.eat()就报错啊?
因为a.eat()调用的是子类的方法,子类的eat方法可以访问父类的eat方法
p.eat() 你直接声明了一个父类的对象,因为该main函数与父类不在同一个包,所以访问不了父类的protected函数
------解决方案--------------------包访问权限和保护访问权限的区别:
包访问权限可以在同一个包中使用,不管是子类还是非子类;
保护访问权限除了能在同一个包中使用外,还可以在不同包的子类中使用。
------解决方案--------------------Abc a = new Abc();
a.eat();
ProtectedFunc p = new ProtectedFunc();
p.eat();
子类及同一个包才可以用 那个对象a是子类的对象 但是ProtectedFunc new出来的对象p跟那个保护成员不在同一个包里 这样说的通么 共同探讨下