gpt4 book ai didi

java - 真的是多态吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:24 26 4
gpt4 key购买 nike

考虑一个名为 Shape 的接口(interface),它有一个 draw() 方法。 TriangleCircle 两个类实现了Shape 接口(interface)并覆盖了draw() 方法。现在在 main 中,我有以下代码:

public static void main(String[] args){

Shape shape = new Triangle();
shape.draw();

//Shape shape = new Circle();
//shape.draw();
}

我发现这是多态性的一个例子,因为我们不知道在运行时将调用哪个绘制方法。解释说 当调用 shape.draw() 时,编译器在编译时在 Shape 接口(interface)中看到 draw() ,而 JVM 在运行时调用 Triangle 类中的 draw() 。 Circle 类中的 draw() 也是如此。

我的疑惑是,这真的能叫多态吗?由于 new Triangle()new Circle() 是硬编码的,编译器不会总是知道它指向子类的 draw() 方法?

最佳答案

Runtime 多态性的概念最好用 Factory 方法来解释,它根据输入返回一个 Shape 对象。

工厂方法:

public static Shape getShape(int i){ 
if(i == 1) {return new Triangle();}
else{return new Circle();}
}

属性文件:

num:1

根据属性文件中的值,得到一个Shape对象。

public static void main(String[] args){

int x = getFromPropertyFile();
Shape shape = getShape(x); // Shape obtained from a factory method
shape.draw(); //Runtime polymorphism
}

编译器不知道会返回哪个对象。它由作为输入提供的值在运行时确定。您可以在 JDBC 驱动程序实现中看到这种实现,其中实现类在运行时确定。

在你的例子中:

Shape shape = new Triangle();
shape.draw();

Shape shape = new Circle();
shape.draw();

The method binding happens at the compile time i.e which methods can be invoked on a given reference type is decided at the compile time.

The selection of the method’s implementation to execute happens at the run time i.e which implementation of the method to be executed i.e the super class version or one of the subclass’s version is decided at the run time.

关于java - 真的是多态吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28019373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com