无法从子类访问受Java保护的方法 我有下面的Foo类,其中包含main方法。 富已经扩展了Nee。 Foo类在com.package1中,Nee类在com.package2中。 问题是我无法从Foo访问Nee的受保护方法 通过其对象初始化。为什么会这样?理论上说受保护的成员可以通过同一个包中的子类或类访问

无法从子类访问受Java保护的方法 我有下面的Foo类,其中包含main方法。 富已经扩展了Nee。 Foo类在com.package1中,Nee类在com.package2中。 问题是我无法从Foo访问Nee的受保护方法 通过其对象初始化。为什么会这样?理论上说受保护的成员可以通过同一个包中的子类或类访问,java,access-modifiers,Java,Access Modifiers,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 giv

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
        */
    }

}
package com.package2;

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



    protected void sayProtected(){

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

    }



}
Nee课程如下所示

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
        */
    }

}
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()
由于类com.package1.Foo和类com.package2.Nee位于两个不同的包中,所以Nee类实例将不允许您调用该类的受保护方法

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

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


Protected允许访问子类的成员。在这里,您试图访问Nee的受保护成员,而受保护仅允许访问Foo上的受保护成员。

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

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

如果您很清楚,没有子类,受保护的成员不能在包外访问,那么无论您在何处创建Nee类对象以访问其子类中或任何其他地方的受保护方法都无关紧要。同样的事情。只有子类知道受保护的成员,并且可以通过子类对象进行访问。

您正试图从另一个包进行访问。受保护的成员只能通过子类对象在包或子类中进行访问。在不同的包中,您不能通过超类访问受保护的成员object@AloneInTheDark是的,但它是Nee的一个子类,理论上说,您可以访问同一个包内的受保护成员,也可以从外部的子类访问受保护成员package@Braj你能给我举个例子吗?@DilukshanMahendra,这样不行。Foo无法访问Nee上的受保护成员。您正在尝试从另一个包进行访问。受保护成员只能通过子类对象在包或子类中进行访问。在不同的包中,您不能通过超类访问受保护的成员object@AloneInTheDark是的,但它是Nee的一个子类,理论上说,您可以访问同一个包内的受保护成员,也可以从外部的子类访问受保护成员package@Braj你能给我举个例子吗?@DilukshanMahendra,这样不行。Foo无法访问Nee上受保护的成员。您可能指的是com.package1.Foo和类com.package1.Nee?糟糕!事实上,你可能想说com.package1.Foo和class com.package2.Nee,对吧?谢谢更新@naimdjon:。是的,我很抱歉:@zero你可能是指com.package1.Foo和class com.package1.Nee?噢!事实上,你可能想说com.package1.Foo和class com.package2.Nee,对吧?谢谢更新@naimdjon:。是的,我很抱歉:@zEro