Java 为什么这叫做多态性?

Java 为什么这叫做多态性?,java,polymorphism,Java,Polymorphism,我正在看这个,在2点52分,它给出了一个例子。它说Shape可以是接口或抽象类,还有另外两个类,即三角形和圆形形状正在进行方法绘制 现在它说: Shape shape=new Triangle(); shape.draw(); Shape shape=new Circle(); shape.draw(); 并声称这是多态性 但据我所知,多态性既可以在方法重载中完成,也可以在本文给出的方法重写中完成 有人能告诉我视频中给出的例子真的是多态性吗?提前感谢您的帮助。有几种方法可以在Java中编写多

我正在看这个,在2点52分,它给出了一个例子。它说
Shape
可以是
接口
或抽象类,还有另外两个类,即
三角形
圆形
<代码>形状正在进行方法绘制

现在它说:

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

Shape shape=new Circle();
shape.draw();
并声称这是多态性

但据我所知,多态性既可以在方法重载中完成,也可以在本文给出的方法重写中完成


有人能告诉我视频中给出的例子真的是多态性吗?提前感谢您的帮助。

有几种方法可以在Java中编写多态结构。多态性只是“创建具有多种形式的变量、函数或对象的能力”

这是多态性,因为方法draw()显然是父类形状,也被多个子类覆盖:Triangle和Circle。因此draw()有不止一种形式:圆和三角形形式


参见

多态性
指具有多种形状或具有不同形式能力的状态。记住这一点,形状可以有多种形式,如三角形或圆形。这些表单将具有共享属性,并按此方式进行编码和使用。作为另一个更好理解的例子,你可以有一个人,一个人可以有多种形式:男性和女性

public abstract class Person {
   private String name;
   private int age;
   //additional code - functionalities that children classes share
}

public class Male extends Person {
   //fields and functionalities that males only have
}

public class Female extends Person {
   //fields and functionalities that females only have
}
然后,您可以通过动态绑定创建所需的性别:

Person male = new Male();
Person female = new Female();

回答您的问题,是的,提供给您的示例确实是多态性。

三角形和圆形都是从Shape类继承的。形状类可以保存子类的对象。所以多态性是存在的。你可以说三角形t=新三角形();和圆c=新的圆()


但这里有一个超级类,它包含子类对象形状s=new Circle();多态性-具有多种形式,

多态性意味着一个对象可以采用多种形式。你可以说 形状a=新三角形(),因为三角形是形状(三角形延伸形状)。也可以说Shape a=new Circle(),因为圆是一个形状(圆延伸形状)。在示例的第一行中,JVM将从Triangle类调用draw()方法。在第二行中,它将调用Circle类中定义的draw()方法,同时使用一个Shape引用

abstract class Shape {
    public abstract void draw();
}

class Triangle extends Shape {

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

class Circle extends Shape {

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

一开始不要太专业,试着从意思上理解。面向对象编程中多态性的含义是对象行为不同的能力。现在让我们思考方法重载如何表示多态性

方法重载是多态的

在OOP中,method表示一种行为,使用java中的方法重载技术,您可以创建一个名称相同但参数列表不同的方法,现在让我们开始思考。。相同的名称表示-->相同的行为,但我们知道,即使名称相似,行为也不完全相同。。简单地说是多态的

示例:您在human类中有eat方法,现在您创建了另一个eat方法,该方法具有不同的参数列表,根据您调用预期行为更改的方法

方法重写是多态的

那么多态性是如何覆盖方法的呢?让我们试着弄明白这一点。 在“方法重写”中,重写在超类中定义的方法

例如:human有一个eat方法,现在您创建了一个SuperHuman类,它是human的一个子类,然后覆盖了eat方法

所以我们知道,超人也有吃东西的能力,但不同,但不像超载,现在我们有一个问题,证明多态性。为什么呢?因为如果你创建了一个人类的实例,那么有一个方法是不存在多态行为的。与创建SuperHuman实例相同,只有一种方法和一种预期行为,因此不存在多态性。这就是我们演示的方式

Human a = new Human();
a.eat();
Human b = new SuperHuman();
b.eat();

我们不能只看左边就简单地说哪个方法输出哪个,因为“a”和“b”都是人类类型,所以编译器无法确定a.eat()和b.eat()的输出是什么,直到代码实际运行,所以它是多态的

多态性是父类可以成为许多子对象的蓝图的地方。三角形和圆形都是一种形状,并且具有共同的特征,例如表面积。一个人作为父类,男性或女性作为子对象是多态性的另一个例子。这是多态性,因为
Shape
是超级类。不要担心。我给了你一票,因为我觉得这是个好问题。欢迎来到堆栈溢出。学习我们的规则是一个过程,犯错误是人的事,尤其是如果你是新来的。维基百科,第三个要点:子类型(或包含多态性)是一个概念,其中一个名称可以表示许多不同类的实例,只要它们与某个公共超类相关。在面向对象编程中,这通常被简单地称为多态性在网上搜索可能比在网上搜索更可取