【发布时间】: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