Java - 无法从子类访问受保护的方法

Dil*_*dra 1 java access-modifiers

  • 我有以下 Foo 类,其中包含主要方法。
  • Foo 扩展了 Nee。
  • Foo 类在 com.package1 中,Nee 类在 com.package2 中。
  • 问题是我无法从 Foo 类通过其对象访问 Nee 的受保护方法。为什么会这样?(理论上说受保护的成员可以被同一包中的子类或类访问)

Foo 类如下所示,

package com.package1;

import com.package2.Nee;

/**
  *
  * @author Dilukshan Mahendra
  */
public class Foo extends Nee{

    public static void main(String[] args) {
        Nee mynee = new Nee();
        /* mynee.sayProtected(); This gives me a compile error,
                                 sayProtected() has protected
                                 access in com.package2.Nee
        */
    }

}
Run Code Online (Sandbox Code Playgroud)

Nee 类如下所示,

package com.package2;

/**
 *
 * @author Dilukshan Mahendra
 */
public class Nee {



    protected void sayProtected(){

        System.out.println("I'm a protected method in Nee!");

    }



}
Run Code Online (Sandbox Code Playgroud)

Sub*_*der 5

由于类com.package1.Foo和类com.package2.Nee位于两个不同的包中,因此Nee类实例将不允许您调用该类的受保护方法。

创建Foo子类的实例,Nee然后调用受保护的方法。

Foo foo = new Foo();
foo.sayProtected()
Run Code Online (Sandbox Code Playgroud)

  • 哎呀!事实上,你可能想说“com.package1.Foo and class com.package2.Nee”,对吧? (2认同)
  • 感谢更新@naimdjon :)。 (2认同)