通常我们声明抽象类的子类是具体的,并将抽象方法覆盖为具体的.是否存在相反的用途?
想到一个用例..
想象一下,你有一个如下课程..
public abstract class Animal {
// Some stuff.
}
Run Code Online (Sandbox Code Playgroud)
然后你说,好吧,现在我想Giraffe上课.Giraffe是具体的,所以没有必abstract要这样做..
public class Giraffe {
// Some stuff that overrides or uses the Animal behaviour.
}
Run Code Online (Sandbox Code Playgroud)
现在给它一些时间,当你有六到七个使用你的代码的应用程序时.
然后,有一天当你感到无聊时,你决定在维基百科上查找长颈鹿,你发现其实Giraffe是非常模糊的!有长颈鹿,条纹长颈鹿,长腿长颈鹿......所有这些都出现在不同的国家!所以你会怎么做?
abstract类,并将extend其更改为子类..但您已经有很多使用您的代码的应用程序.你是否立即将它们过时并强制进行大规模更新?Giraffe,但是...... StripyGiraffe不够具体......除非您可以创建该类abstract..所以你会怎么做?
你采取后一种选择..
public abstract class StripyGiraffe extends Giraffe
Run Code Online (Sandbox Code Playgroud)
你可以继续扩展它..
public class AfricanStripyGiraffe extends StripyGiraffe
Run Code Online (Sandbox Code Playgroud)
这样,旧代码可以毫无障碍地工作,并且您仍然非常欢迎尽可能扩展对象层次结构.您可以通过将对象声明为abstract不具有足够的特定性来实现对象的完整性,并使用此方法允许用户仍然进行声明.
Giraffe geoffrey = new AfricanStripyGiraffe();
Run Code Online (Sandbox Code Playgroud)