Chi*_*led 7 java compiler-construction inheritance
我们在Java中使用继承来抽象出超类中的类似行为,并让所有子类继承它.这样做的一个优点是,我们现在只有一个要维护的方法副本(即在超类中).
Class Animal
{
public void makeNoise()
{
}
public void sleep()
{
}
}
Class Cat extends Animal
{
// Override the makeNoise method
public void makeNoise()
{
}
}
Class someClass
{
public static void main(String args[])
{
Cat fluffy = new Cat();
fluffy.sleep();
}
}
Run Code Online (Sandbox Code Playgroud)
我试图了解Java编译器如何知道类型引用的sleep()方法Cat.在Cat子类中不能有方法的副本(它违背了在超类中使用它并让所有子类继承它的目的).这些信息是否存储在其他地方?
当编译器看到fluffy.sleep()它时,首先在Cat类中查找名为sleep不带参数的公共实例方法.由于它没有找到它,它向上移动继承链Animal,并进行相同的检查Animal.它找到了它,所以一切都很好.
除了代码之外,这些信息并没有真正"存储"在任何地方,然后是Java字节代码.
| 归档时间: |
|
| 查看次数: |
823 次 |
| 最近记录: |