java - 静态/编译时多态性

标签 java oop polymorphism overloading static-polymorphism

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

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) )不是多态性 .

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

最佳答案

对于 nonPolymorphicMethod1(int a) ,它不会被视为多态的原因是因为它与其他非多态方法具有不同的名称。

对于 nonPolymorphicMethod( int a, int b )nonPolymorphicMethod( 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 
    }
}

关于java - 静态/编译时多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57273311/

相关文章:

java - 用模式替换 if else 语句

ruby-on-rails - Mongoid 中的多态性

java - Android SMS Intent 被同一主体和同一接收者卡住

java - 插入Access数据库

function - 在函数调用中,为什么parse语句在SWIFT中最后执行?

C++ 多态加载/保存

sqlalchemy - 双重多态继承问题

java - Web 应用程序需要为 UTF-8 下载的文件提供适当的响应 header

java - 如何使用 lambda 在 Java 中实现两个抽象方法?

java - 如何添加priceAfterDiscount的公共(public)方法来返回折扣后的价格