这里实现了什么接口? (编译时/运行时多态)?

问题描述 投票:0回答:0

如果具有重写方法的类之间存在继承,则其实现运行时多态(想象一下超类具有指向子类对象的引用)。但现在假设我们有一个接口,它有两个相同的方法但具有不同的参数(如方法重载)。因此,当一个类实现该接口时,它将包含相同的所有接口方法。据说它覆盖了该类中的接口方法。

问题(它试图实现什么?(编译时/运行时)多态性?

以下面的代码为例

interface RemoteControl {
    void turnOn();
    void turnOn(int channel);
}

class TV implements RemoteControl {
    public void turnOn() {
        System.out.println("TV is turned on");
    }

    public void turnOn(int channel) {
        System.out.println("TV is turned on. Channel: " + channel);
    }
}

class AC implements RemoteControl {
    public void turnOn() {
        System.out.println("AC is turned on");
    }

    public void turnOn(int temperature) {
        System.out.println("AC is turned on. Temperature: " + temperature + " degrees");
    }
}

public class UserCode {
    public static void main(String[] args) {
        RemoteControl tvRemote = new TV(); // Create a TV object using the RemoteControl interface reference
        RemoteControl acRemote = new AC(); // Create an AC object using the RemoteControl interface reference

        tvRemote.turnOn(); 
        tvRemote.turnOn(5); 

        acRemote.turnOn(); 
        acRemote.turnOn(25); 
    }
}

现在在上面的代码中你能告诉我它试图实现什么类型的多态性吗?

我的理论 --> 这是**静态多态性** 因为如果具有 Overriden 方法的类之间涉及任何继承,我们就可以说它是运行时多态性。但这里不涉及类之间的继承

尽管上面我们在实现接口的各个类中重写了接口的方法,但它仍然实现了静态多态性。这里说“重写方法”是不合适的,因为接口只是用来定义方法,而不是实际描述它们。 所以下面的部分是在编译时决定的?

RemoteControl tvRemote = new TV(); tvRemote.turnOn(); tvRemote.turnOn(5);


java interface polymorphism compile-time
© www.soinside.com 2019 - 2024. All rights reserved.