为什么子类中不能访问另一个包中父类中的protected方法

问题描述:

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(); //编译报错
}
}

为什么子类中不能访问另一个包中父类中的protected方法

这个是java语言规范的规定了:
[quote]
A protected member or constructor of an object may be accessed from outside the package in which it is declared only by code that is responsible for the implementation of that object.
[/quote]
protected,算是默认的访问作用域的超集,他们在相同包下时,都可以访问所声明的成员;但对于不同包的访问,默认访问域就不行,protected也必须是通过继承关系来访问。

[code="java"]
TestBase base= new Child();
base.printProtected(); //编译报错
[/code]
这个会出错,是因为你在不同包里访问TestBase声明的printProtected方法,所以不行,你可以在你子类的printProtected通过super来访问父类的方法。

建议你复习一下JAVA的访问控制符

这个是JAVA关键字,它的作用就是这个样子的,没办法说出个所以然来啊

王八的屁股——龟腚啊

可以这样解释吧,子类可以继承父类的protected方法,并且在子类内部是可以访问的(就是在子类里调用this.printProtected(),或者super.printProtected())。但是这个方法对于子类来说也是protected的。
protected的含义就是本类可以访问,同一包内的可以访问,子类可以访问。