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

时间:2014-03-13 06:56:34

标签: java access-modifiers

  • 我有以下Foo类,其中包含main方法。
  • 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
        */
    }

}

Nee Class如下所示,

package com.package2;

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



    protected void sayProtected(){

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

    }



}

4 个答案:

答案 0 :(得分:3)

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

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

Foo foo = new Foo();
foo.sayProtected()

答案 1 :(得分:1)

如果你清楚受保护的成员在没有子类的情况下无法访问外部包那么你在哪里创建Nee类对象来访问其子类或其他任何地方的受保护方法并不重要。同样的事情。只有子类知道受保护的成员,并且可以通过子类对象访问。

答案 2 :(得分:0)

成员可以通过同一个包中的子类或类访问。 您正在使用两个不同的包。

答案 3 :(得分:0)

受保护允许访问子类的成员。在这里,您尝试访问Nee受保护的成员时受保护只允许访问Foo上的受保护成员。