class Bank{
float getRateOfInterest(){return 0;}
}
class SBI extends Bank{
float getRateOfInterest(){return 8.4f;}
}
class TestPolymorphism{
public static void main(String args[]){
Bank a = new SBI();
SBI b = new SBI();
a.getRateOfInterest();
b.getRateOfInterest();
}
}
a.getRateOfInterest()
和b.getRateOfInterest()
都提供相同的输出。那么这两个陈述之间有什么区别呢?
我认为第一个是向上倾斜。
答案 0 :(得分:1)
Java方法都是虚方法,因此调用的方法取决于被调用对象的运行时类型,而不是持有引用的变量的编译时类型。
答案 1 :(得分:0)
所有java方法都是虚拟的(按设计) 他们依靠实现类来提供方法实现。
以下是更多信息
- Can you write virtual functions / methods in Java?
- https://en.wikipedia.org/wiki/Virtual_function
以下是维基百科的摘录: -
public class Animal {
public void eat() {
System.out.println("I eat like a generic Animal.");
}
public static void main(String[] args) {
Animal animal=new Wolf ();
animal.eat(); //print "I eat like a wolf!
}
}
class Wolf extends Animal {
@Override
public void eat() {
System.out.println("I eat like a wolf!");
}
}
虚拟功能“迟到”解决。如果有问题的功能是 基类中的'virtual',是派生程度最高的类的实现 根据对象的实际类型调用函数 无论指针的声明类型如何,都可以引用 参考。如果它不是“虚拟”,则该方法“早期”解决 调用的函数是根据声明的类型选择的 指针或参考。
虚函数允许程序调用不能的方法 在代码编译的那一刻,甚至必然存在。
答案 2 :(得分:0)
如果您使用new SBI()
构建它,则不行。它总是返回 8.4f 。