使用接口和抽象类的多态性

问题描述 投票:0回答:1
abstract class B extends A implements C {

// why I have to add implementation here for add() function


}
class A{
    void add(){        
    }
}
interface C{
    void add();

}

我期望我不需要在抽象类

add()
中实现
B
方法。为什么会出现这种情况?

java oop polymorphism
1个回答
-1
投票

您的抽象类 B 正在扩展类 A,因此可以访问类 A 的

add()
方法。 抽象类 B 也实现了接口 C,因此必须实现接口的
add()
方法,因为它们是两个不同的方法。

为了避免这种情况,您可以将接口方法实现为抽象方法

public abstract class B extends A implements C{


    @Override
    public abstract void add();
}

class A{
    void add(){}
}

interface C{
    void add();
}

,或者你可以让 A 实现 C 并让 B 扩展 A

public abstract class B extends A {
    
}

class A implements C{
    public void add(){}
}

interface C{
    void add();
}

第二个选项通过假设您想要一个可以在多个类中重写的添加方法来避免名称冲突方法

© www.soinside.com 2019 - 2024. All rights reserved.