rap*_*apt 5 java visibility protected
我从子类调用超类'受保护的方法.为什么这种方法"不可见"?
我一直在读一些职位如这一个,这似乎违背了以下内容:
超级课程:
package com.first;
public class Base
{
protected void sayHello()
{
System.out.println("hi!");
}
}
Run Code Online (Sandbox Code Playgroud)
子类:
package com.second;
import com.first.Base;
public class BaseChild extends Base
{
Base base = new Base();
@Override
protected void sayHello()
{
super.sayHello(); //OK :)
base.sayHello(); //Hmmm... "The method sayHello() from the type Base is not visible" ?!?
}
}
Run Code Online (Sandbox Code Playgroud)
Pau*_*cks 10
base是一个在任何方面都不特殊的变量:它不是类层次结构的一部分,并且通过它无法获得受保护的访问.即使sayHello可以访问受保护的成员Base,它也只能通过继承访问(因为它不在同一个包中:protected关键字允许通过继承和包进行访问,请参阅本Oracle教程中的表).
访问this和super允许,因为它们是继承层次结构的一部分.