首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多态混淆

多态混淆
EN

Stack Overflow用户
提问于 2020-05-06 09:32:03
回答 4查看 486关注 0票数 0

我经常阅读多态性的定义,例如:

多态性是指有不同类型的对象来理解同一消息的能力

但是,如果我们不使用多态性,例如,如果我们有一个Circle类型的对象和一个方法draw(),而另一个类型的对象有一个方法draw(),我们可以这样做:

代码语言:javascript
复制
circle1.draw();
rectangle1.draw();

因此,circle1rectangle1不使用多态性就可以理解相同的消息draw()

我是不是遗漏了什么?

EN

回答 4

Stack Overflow用户

发布于 2020-05-06 09:38:18

在您的示例中,您只有两个不同的类,哪些方法“绘图”是相同的,但这不是polimorpfhism中的。

但是,如果您有这样的接口或抽象类:

代码语言:javascript
复制
public class pol {
    public static void main(String[] args) {
        Shape[] shapes = {new Circle(), new Rectangle()};
        for(Shape s: shapes) {
            s.draw();
        }
    }
}

interface Shape {
    void draw();
}

class Circle implements Shape{

    @Override
    public void draw() {
        System.out.println("Circle");
    }
}

class Rectangle implements Shape{

    @Override
    public void draw() {
        System.out.println("Rectangle");
    }
}

然后,即使您以Shape的形式访问它,每个单独的方法绘图也将被执行。因此,输出将是:

代码语言:javascript
复制
Circle
Rectangle
票数 2
EN

Stack Overflow用户

发布于 2020-05-06 09:44:15

我想分享一些基本的例子:

代码语言:javascript
复制
interface Shape{
 void draw();
}

class Circle implements Shape{

    @Override
    void draw(){
    //Draw Circle here.
    }
}

class Rectangle implements Shape{

    @Override
    void draw(){
    //Draw Rectangle here.
    }
}

所以在你的例子中:

代码语言:javascript
复制
circle1.draw();
rectangle1.draw();

您可以安全地调用绘图方法--圆对象和矩形对象,因为它们实际上都是形状的。circle1既是圆形又是形状,rectangle1既是矩形又是形状。即多态性,对象可以是多个类型。

票数 1
EN

Stack Overflow用户

发布于 2020-05-06 09:41:01

您提到的抽签()方法完全不同,属于不同的类。是的,在多态中,对象理解方法签名,但有一些差别。例如,假设他们有一个在两个对象中设置直径的方法,如果没有多态性,您就必须实现与您拥有的对象一样多的方法!但是,例如,用自己的方式来定义每个物体的面积,因为它们确实是不同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61631841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档