This question already has answers here:
Help to understand the issue with protected method
                                
                                    (6个答案)
                                
                        
                                5年前关闭。
            
                    

我有以下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类如下所示,

package com.package2;

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



    protected void sayProtected(){

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

    }



}

最佳答案

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

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

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

关于java - Java-无法从子类访问 protected 方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22371287/

10-08 21:57