【问题标题】:Inheritance Hidden Method java [duplicate]继承隐藏方法java [重复]
【发布时间】:2015-06-09 15:54:59
【问题描述】:

嗨,我在一本书上看到了这段代码的 sn-p。但不知何故,我无法完全理解 java 如何使用私有方法而不是公共方法

package com.toro.employee2;

public class Deer {
    public Deer() {
        System.out.print("Deer");
    }

    public Deer(int age) {
        System.out.print("DeerAge");
    }

    private boolean hasHorns() {
        return false;
    }

    public static void main(String[] args) {
        Deer deer = new Reindeer(5);
        System.out.println("," + deer.hasHorns());
    }
}

class Reindeer extends Deer {
    public Reindeer(int age) {
        System.out.print("Reindeer");
    }
    public boolean hasHorns() {
        return true;
    }
}

输出是 DeerReindeer,false 我的问题是:

当我将 Deer 类的 hasHorns() 方法更改为 PRIVATE 以外的其他访问修饰符时,它将使用 Reindeer 类的 hasHorns() 方法因此返回 true,但如果 Deer 类的 hasHorns() 方法使用 PRIVATE 访问修饰符,它将返回改为假。

如果您能解释一下这是如何工作的,那就太好了。

【问题讨论】:

  • 如果你在一个类中定义了一个privatemethod,你将无法从任何其他类访问它,并且甚至是一个子类 可以' t 覆盖或访问此方法。因此,在您的情况下,如果您在Deer 类中将hasHorns() 设置为私有,它将不会在Reindeer 子类中被覆盖,这就是您将获得true 的原因,但是如果您更改其访问修饰符,它将被覆盖通过子类,所以如果你调用它,你会得到false

标签: java inheritance methods hidden


【解决方案1】:

private 方法不会被继承也不会被覆盖。因此,当您调用deer.hasHorns() 时,执行的方法是Deer#hasHorns。实际上,如果将main 方法从Deer 移动到Reindeer 或其他类,那段代码就会失败。

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 1970-01-01
    • 2011-04-18
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2015-03-26
    • 2015-04-29
    相关资源
    最近更新 更多