【问题标题】:Java How to access a protected method in a parent class in a different packageJava如何访问不同包中父类中的受保护方法
【发布时间】:2016-05-06 08:24:05
【问题描述】:

已有一个使用此方法的类

受保护的 HttpResponse 帖子(字符串路由、字符串 json、BasicNameValuePair...参数)抛出 IOException

我在不同的包中创建一个子类,但想调用这个方法。我该怎么做?

另外,子类的父类是抽象的,无法实例化。

【问题讨论】:

  • 您是否尝试过在您的孩子班上做类似的事情? -> super.post(params)... protected 意味着只有孩子可以访问,与包裹位置无关。如果它是默认的,那么它会很重要。
  • @Lucas 实际上,与 C++ 不同,在 java 中受保护意味着它可以在同一个包中访问。 (当然还有子类)。
  • 默认表示只能从同一个包中访问。受保护意味着它只能从孩子访问。

标签: java eclipse


【解决方案1】:

William,您可以从您的子类的任何方法调用该方法,前提是您用来调用它的引用属于子类或其子类的类型(其中的基本原理在我的回答this 问题)。作为一个简化的例子,考虑这个 Parent 类

package parent;

public class Parent {

    protected void method() {
        System.out.println("parent.Parent.method() called");
    }
}

由子类扩展

package child;

import grandchild.Grandchild;
import parent.Parent;

public class Child extends Parent {

    public void anyMethod(Child child, Grandchild grandchild) {
        this.method();
        child.method();
        grandchild.method();
    }
}

依次由 Grandchild 类扩展。

package grandchild;

import child.Child;

public class Grandchild extends Child {
}

给定这个类层次结构,这段代码

Child child1 = new Child();
Child child2 = new Child();
Grandchild grandchild = new Grandchild();
child1.anyMethod(child2, grandchild);

将产生以下输出。

parent.Parent.method() called
parent.Parent.method() called
parent.Parent.method() called

因此,一个 Child 对象可以访问它自己的受保护的 method() 成员以及 Child 的另一个实例或 Child 子类的实例的 method() 成员。但是,它不能使用类型为 Parent(除非它使用 super)或 Parent 的不同子类(例如 Brother)的引用来调用该方法。

我希望这能回答您的问题,并让您了解可以(或不能)做什么。如果没有,请告诉我。

【讨论】:

    【解决方案2】:

    一位评论者在此处链接了答案。我想我错误地删除了该评论:

    Call protected method from a subclass of another instance of different packages

    【讨论】:

      【解决方案3】:
      package package2;
      import package1.Parent;
      class Child extends Parent //assuming Parent is in package 1
      {
         @Override
         protected HttpResponse post(...)
         {
             super.post(...)
             //Remaining stuff
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2020-05-02
        • 2013-04-06
        • 1970-01-01
        • 1970-01-01
        • 2018-04-20
        • 1970-01-01
        • 2011-03-11
        • 2019-08-18
        • 1970-01-01
        相关资源
        最近更新 更多