【问题标题】:Java - Protected method cannot be accessed from a subclass [duplicate]Java - 无法从子类访问受保护的方法[重复]
【发布时间】:2014-04-17 18:06:12
【问题描述】:
  • 我有以下 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!");

    }



}

【问题讨论】:

  • 你正试图从另一个包访问。
  • 受保护的成员只能通过子类对象在包或子类中访问。在不同的包中,您不能通过超类对象访问受保护的成员
  • @AloneInTheDark 是的,但它是 Nee 的子类,理论上说您可以访问同一包内的受保护成员或从包外的子类访问受保护的成员
  • @Braj 你能举个例子吗?
  • @DilukshanMahendra 它只是不能那样工作。 Foo 无法访问 Nee 上的受保护成员。

标签: java access-modifiers


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 您的意思可能是“com.package1.Foo 和 com.package1.Nee 类”?
    • 糟糕!实际上,您可能是说“com.package1.Foo 和 com.package2.Nee 类”,对吧?
    • 感谢更新@naimdjon :)。
    • 是的,我很抱歉 :( @zEro
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      如果您很清楚,如果没有子类,受保护的成员无法在包外部访问,那么您在哪里创建 Nee 类对象以访问其子类或其他任何地方的受保护方法都没有关系。它是一样的。只有子类知道受保护的成员,并且可以通过子类对象访问。

      【讨论】:

        猜你喜欢
        • 2015-11-04
        • 2015-05-09
        • 2015-08-14
        • 1970-01-01
        • 2019-07-12
        • 2012-11-25
        • 1970-01-01
        • 2013-04-06
        • 1970-01-01
        相关资源
        最近更新 更多