【发布时间】:2015-11-02 21:16:34
【问题描述】:
这个问题类似于Why can a "private" method be accessed from a different instance?
我对那里的答案深信不疑。代码应该运行。但是,当我将代码更改为这样时
class Horse extends Animals{
}
public class Animals {
private void eat(){
System.out.println("Generic Eating");
}
public static void main(String[] args){
Animals h = new Horse();
h.eat();
}
}
当我尝试使用多态性来调用子类 Horse 上的私有方法 eat() 时,它会工作并调用父类的方法。
- java不会动态调用类的实例具体方法吗?
- 这不应该引发运行时异常吗?
- 这是否意味着该方法实际上是继承的,但不能正常访问?
【问题讨论】:
-
这些类是否定义在同一个文件中?
-
@KevinKrumwiede 这有关系吗?
-
@KevinKrumwiede,文件与成员可见性相关的任何事情都无关紧要。
-
@KevinKrumwiede,您说的是内部类还是在同一文件中定义的类?因为这是两个非常不同的概念。如果您谈论内部类,那么显然它们需要在同一个文件中定义,因为必须在另一个文件中定义一个。 Java 不支持跨多个文件的类定义。正如您在问题中看到的那样,它绝对与内部类无关。再说一遍,没关系。最后,称外部类为“parent”是很不精确的……这种讨论需要非常精确,否则毫无意义
-
@KevinKrumwiede,你看到
class Animals { class Horse ... {...}}了吗?或者你看到class Horse ... {} class Animals {}?它们是完全不同的东西,我希望你同意这一点。首先,Horse是Animals的内部类。在第二种情况下,它不是。最后,您可能没有尝试编译,是吗?它是完全可编译的。继续尝试吧。在任意目录中创建一个名为Animals.java的文件,然后复制并粘贴该示例代码。然后运行javac Animals.java。繁荣,编译。
标签: java polymorphism instance private