首页 > 解决方案 > 静态/编译时多态性

问题描述

为什么方法重载称为静态编译时 多态性

Java 中的示例。

class StaticPolymorphismSample {
    void polymorphicMethod(int a) {

    }
    void polymorphicMethod(int a, int b) {

    }
    void polymorphicMethod(String a) {

    }
    void nonPolymorphicMethod(int a) {

    }
    void nonPolymorphicMethod1(int a) {

    }

}

所以我的问题是。

为什么我们说方法重载(在这种情况下polymorphicMethod是方法)是静态多态性,而另一种方法(nonPolymorphicMethod(int a) nonPolymorphicMethod1(int a))不是多态性

从技术上讲,我看不出具有相同名称和不同参数的方法与具有不同的方法之间的不同,此处的所有答案和谷歌中的主题不适用于我的问题。

标签: javaooppolymorphismoverloadingstatic-polymorphism

解决方案


之所以不将其视为多态是因为nonPolymorphicMethod1(int a)它的名称与其他非多态方法不同。

For nonPolymorphicMethod( int a, int b )andnonPolymorphicMethod( int a )这些不被认为是多态的,因为它们不采用相同的参数。编辑这是错误的,请参阅下一行

您展示的其他方法是多态的,因为它们共享名称,但参数类型或参数数量不同。

方法中多态性的一个更好的例子是:

public abstract class ClassA
{
    public Object getObject()
    {
        return new Object();
    }
}

public class ClassB extends ClassA
{
    @Override
    public ClassB getObject()
    {
        return new ClassB();
    }
}

public class ClassC extends ClassA
{
    @Override
    public ClassC getObject()
    {
        ClassC example = new ClassC();
        example.doStuff();
        return example;
    }

    private void doStuff()
    {
        // Do Something To Change The Object 
    }
}

推荐阅读