Java:从子类调用超类'受保护的方法 - 不可见?

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教程中的表).

访问thissuper允许,因为它们是继承层次结构的一部分.

  • 我认为你是这里唯一注意到`base`只是变量的人. (3认同)
  • 我想我需要更好的术语..我知道我想说的是什么,但我认为那里有更好的接受条款,我现在还记不起来了...... (2认同)