我有B类,它继承自A类.超类A是抽象的,包含一个抽象方法.我不想在B类中实现抽象方法,因此我需要将类B声明为抽象.声明B类抽象,有两件事对我有用(程序编译并正确运行):
1.)我没有在B类中声明任何抽象方法,甚至认为该类是抽象的.我认为这是有效的,因为该类继承了类A的抽象方法,这足以使类被声明为抽象:我们不需要在类中直接声明的任何其他抽象方法.
2.)我在类B中声明了与在类A中声明的相同的抽象方法.这是某种覆盖(?),与java中的覆盖不同(使用相同的头,但提供不同的实现) ),这里我只是再次使用该方法的相同标题.
这两件事都有效,我不确定它们是否都好,以及其中一些是否优先(更正确).两种方式是否相同(它们对Java是否相同)?
这里我给出一些示例类,所以我的意思对你来说更清楚:
情况1.):
public abstract class A { public abstract String giveSum(); } public abstract class B extends A { }
案例2):
public abstract class A { public abstract String giveSum(); } public abstract class B extends A { public abstract String giveSum(); }
问候
在Java中,abstract
类注释表明该类无法直接实例化.可以abstract
简单地声明一个类,因为它永远不应该被实例化(可能它只包含静态方法),或者因为它的子类应该被实例化.
它是不是一个要求abstract
的类包含abstract
的方法(逆是真实的:含有一个或多个类abstract
的方法必须是abstract
).
你是否应该复制抽象方法定义的问题可能被认为是一个风格问题 - 但是我很难提出一个支持重复定义的论据(我能提出的唯一论据是在这种情况下)类层次结构可能会更改语义或方法的使用,因此您希望在类B中提供额外的javadoc.)
反对重新定义该abstract
方法的主要论点是重复的代码很糟糕 - 它使重构变得更加繁琐(所有经典的"不重复的代码"参数都适用.)
它们在功能上是相同的,但第一个是首选,因为它更短并且不奇怪.