谢谢
多态性可以通过重写来实现。简而言之,多态性指的是一个对象根据其自身性质提供不同行为(使用不同实现)的能力。具体来说,这取决于它在类层次结构中的位置。
方法重写是指在超类或接口中定义的方法由其子类之一重新定义,从而修改/替换超类提供的行为。调用一个或另一个实现的决定是在运行时动态做出的,这取决于从哪个对象调用操作。注意,重写时方法的签名保持不变。
方法重载与多态性无关。它指的是定义一个方法的不同形式(通常通过接收不同的参数数或类型)。可以看作是静态多态性。调用一个或另一个实现的决定是在编码时做出的。注意,在这种情况下,方法的签名必须更改。
运算符重载是一个不同的概念,与多态性相关,多态性指的是某个依赖于语言的运算符能够根据其操作数的类型进行不同的行为(例如,+
可以表示与字符串
的串联以及与数字操作数的相加)。
维基百科中的例子很能说明问题。
以下相关问题可能也很有用:
下面的例子属于哪个概念:方法重载还是方法重写???
让我们用这个简单的Java代码: 我试图找出这三个ate()方法的哪个版本将运行。现在,当我键入 结果是“普通动物一般地吃”,这是完全可以理解的。 当我输入时也会发生同样的事情: 结果是“吃干草的马”,这也是完全合乎逻辑的。 这就是我困惑的地方。当我输入: 我得到: 我期望编译器从动物类引用调用ate()方法,而不是马对象引用。 所以我的问题是,当我有一个泛型引用变量类型引用一个对象类型时(比如:
如果方法是private,static或final,则通过重载实现静态多态。 那么重载公共和默认方法呢?
当我运行这段代码时,它会打印。我的问题是为什么没有编译时错误?对象和字符串的默认值为NULL。那么为什么不编译器说。
问题内容: 让我们看一下这个简单的Java代码: 我试图找出三个eat()方法的哪个版本。现在,当我键入 输出是“一般动物食用”,这是完全可以理解的。 当我键入以下内容时,会发生相同的事情: 输出是“吃干草的马”,这完全是合乎逻辑的。 这就是让我感到困惑的地方。当我键入: 我得到: 我希望编译器从Animal类引用而不是Horse对象引用中调用eat()方法。 所以我的问题是,当我有一个引用对象类
问题内容: 就Java而言,当有人问: 什么是多态性? 将超载或重载是一个可以接受的答案? 我认为还有更多。 如果你有一个抽象基类,它定义了一个没有实现的方法,并且你在子类中定义了该方法,那该方法是否仍然覆盖? 我认为过载不是肯定的正确答案。 问题答案: 表达多态性的最清晰方法是通过抽象基类(或接口) 此类是抽象的,因为该方法不适用于人类。只有男性和女性子类别才可以定义。同样,人类是一个抽象的概念