通常我们声明抽象类的子类是具体的,并将抽象方法覆盖为具体的。是否存在相反的用途?
答案 0 :(得分:7)
想到一个用例..
想象一下,你有一个课程如下..
public abstract class Animal {
// Some stuff.
}
然后你说,好吧,现在我想要一个Giraffe
课程。 Giraffe
具体,因此无需进行abstract
..
public class Giraffe {
// Some stuff that overrides or uses the Animal behaviour.
}
现在给它一些时间,当你有六到七个使用你的代码的应用程序时。
然后,有一天,当你感到无聊时,你决定在维基百科上查找长颈鹿,你发现事实上,Giraffe
非常模糊!在那里发现了长颈鹿,条纹长颈鹿,长腿长颈鹿......所有这些都出现在不同的国家!那你做什么?
abstract
类,并将extend
更改为子类..但您已经有很多应用程序使用您的代码。您是否立即将它们废弃并强制进行大规模更新?Giraffe
形式,但是...... StripyGiraffe
还不够具体......除非您可以创建该类abstract
.. 那你做什么?
你选择后一种选择..
public abstract class StripyGiraffe extends Giraffe
你可以继续扩展它..
public class AfricanStripyGiraffe extends StripyGiraffe
这样,旧代码可以顺利运行,并且您仍然非常欢迎尽可能扩展对象层次结构。您可以通过将对象声明为abstract
来确定对象的完整性,因为它们不够具体,无法实现,并且使用此方法可以让用户仍然处于状态。
Giraffe geoffrey = new AfricanStripyGiraffe();
答案 1 :(得分:-1)
在Java中,每个类都派生自Object类型。当你创建一个抽象类表单具体类时,这就是一种答案。您只是声明实现不完整,应该在较低的抽象层上详细说明。