Java/抽象类

标签 java

我有一个带有一个抽象方法的抽象类,我想在 3 个不同的类中实现该方法,但这 3 个类中的 2 个具有与以下代码相同的方法实现,我该怎么做才能为这两个类提供一个实现类(class)?
注意:我不能将 C 和 D 表示为一个类!!

abstract class A
{
    public abstract void method();
}

class B extends A
{
    void method(){print "Hello";}
}

class C extends A
{
    void method(){print "Bye";}
}

class D extends A
{
    void method(){print "Bye";}
}

最佳答案

您可以消除此处的一些复杂性,直接在基类 A 中实现“Bye”方法,并在派生类 B 中使用“Hello”方法覆盖它:

class A { void method() { print "Bye"; } }

class B extends A { void method() { print "Hello"; } }

如果 A 必须保持抽象,那么您可以创建一个中间类,其中包含类 C 和 D 所需的行为,然后创建 C 并简单地扩展它而不覆盖任何方法:

abstract class A { abstract void method(); }

abstract class CD extends A { void method() { print "Bye"; } }

class B extends A { void method() { print "Hello"; } }

class C extends CD { }

class D extends CD { }

还有其他选项,例如将常见行为提取到新类中,并通过组合而不是继承来重用它们 - 如果您的类足够复杂,那么这可以更简单地封装单一职责并促进测试。

关于Java/抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42788757/

相关文章:

java - 在有效日志级别检查的上下文中,Log4j2 中的替换参数和 Java lambda 表达式有什么区别?

java - Java中的HashMap.values()方法返回的集合是什么?

java - Java 中多种语言的文本占位符

java - 关于TCP校验和计算的问题

java - 正确使用Java异常

JavaFX : draw sharp thin lines

java - Spring RMI刷新StubOnConnectFailure不工作

java - 如何避免空表出现 "SELECT max(rank) FROM test"的空结果?

Javafx 单选按钮定向绑定(bind)

java - 如何解决我的登录/创建帐户程序中的这个序列化错误?