当前位置: 代码迷 >> J2SE >> 继承protected函数怎么调用
  详细解决方案

继承protected函数怎么调用

热度:9691   发布时间:2013-02-25 00:00:00.0
继承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跟那个保护成员不在同一个包里 这样说的通么 共同探讨下
  相关解决方案