【问题标题】:Is it possible to access a private method of parent class from the child class in Java? [duplicate]是否可以从 Java 中的子类访问父类的私有方法? [复制]
【发布时间】:2012-12-18 16:15:07
【问题描述】:

如何在这种类型的父类中调用私有方法?我所做的是一段丑陋的代码,但它确实有效,尽管我不认为这是一个真正的解决方案。

非常感谢有关如何完成此操作的一些建议。我一直在寻找解决方案,但没有让我对此事有所了解。

    public abstract class Car {

         public void passItOn(int a) {

                takesVariable(a);

         }
    private void takesVariable(int a) {

         //Process the variables
    }

孩子:

     public abstract class Wheel extends Car {

     boolean a = anotherMethod();
        if(value() != a) {
          passItOn(a);
        }

     }

我的录取率存在一些问题,但我已经解决了!回复的都会给+分!!!

【问题讨论】:

  • 如果你想使用你的方法private 有什么意义呢?如果您希望在derived 类中使用它们,最好使用protected
  • 使用protected 访问修饰符而不是private。虽然你的问题不清楚。
  • 我同意 Rohit 的观点,如果有理由不这样做 - 为什么会有一个!-,我认为你的解决方案还可以
  • 受保护的作品就像一个魅力!太感谢了!我知道我忽略了一些东西。我向你的功夫低头!

标签: java


【解决方案1】:

访问私有字段/方法is possible using reflection如果安全管理器允许,但强烈建议不要这样做。

私有方法是私有的是有原因的。如果您有权访问基类,则创建方法 protected 是一个更好的解决方案。

【讨论】:

  • 还有其他方法吗?
  • @HarshitGupta 据我所知没有。
【解决方案2】:

私有方法不被继承,因此不能被调用。如果您确实想访问此方法,请更改其访问修饰符关键字(protectedpublic)。

【讨论】:

  • +1 您只能为具有相同外部类的同一 Java 文件中的类调用私有方法。否则private 只表示这个类。
  • 如果我错了,请纠正我,但私有方法也被继承,你不能在子类中调用它们。这是因为当您从父类调用公共/受保护方法并且它们调用私有方法时没有错误。
【解决方案3】:

如果您可以保护它,请执行此操作:

public class BaseClass {
    protected void whatever() {}
}

或者,如果您出于某种原因想要将其保密,并且它还可以让您的基类更好地控制“whatever”的使用方式/时间:

public class BaseClass {
    private void whatever() {}
    protected void doWhatever() {
        if(!forSomeReasonDoNotWantThisToBeUsed()) {        
            whatever();
        }
    }
}

【讨论】:

    【解决方案4】:

    如果您想从子类访问它,请将其设为 protected

    【讨论】:

      【解决方案5】:

      绝对没有办法做到这一点。您不能从任何其他类(无论是扩展类)调用一个类的 private 方法。它只能在该类本身内部访问。说是private是有原因的。

      如果你希望它只被扩展类而不是外部世界访问,那么为你的函数使用protected访问修饰符。

      【讨论】:

        猜你喜欢
        • 2017-07-15
        • 1970-01-01
        • 1970-01-01
        • 2012-09-29
        • 2019-09-20
        • 2014-05-30
        • 1970-01-01
        • 2018-06-14
        • 2018-10-28
        相关资源
        最近更新 更多