关于创建类实例的困惑

时间:2017-04-06 07:42:55

标签: java

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()都提供相同的输出。那么这两个陈述之间有什么区别呢?

我认为第一个是向上倾斜。

3 个答案:

答案 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