gpt4 book ai didi

java - 为什么具体类的一个子类可以声明为抽象的,而父类的一些方法可以被重写并声明为抽象的?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:46:09 24 4
gpt4 key购买 nike

通常我们将抽象类的子类声明为具体的,并将抽象方法重写为具体的。是否存在相反的用途?

最佳答案

想到一个用例..

想象一下你有一个类如下..

public abstract class Animal {
// Some stuff.
}

然后你说,好吧,现在我想要一个 Giraffe 类。 Giraffe 是具体的,所以没必要让它抽象..

public class Giraffe {
// Some stuff that overrides or uses the Animal behaviour.
}

现在给它一些时间,当您有六七个应用程序使用您的代码时。

然后,有一天当你无聊的时候,你决定在维基百科上查找长颈鹿,你发现事实上,Giraffe 非常模糊!有 Blob 长颈鹿、条纹长颈鹿、长腿长颈鹿……所有这些都出现在不同的国家!那你是做什么的?

  • 您可以将 Giraffe 更改为一个抽象类并在子类中扩展它。但是您已经有很多应用程序使用您的代码。您是否立即使它们过时并强制进行大规模更新?
  • 您可以创建更多的类来描述更具体形式的 Giraffe,但是.. StripyGiraffe 不够具体.. 除非您可以创建该类 摘要..

那你是做什么的?

你选择后者..

public abstract class StripyGiraffe extends Giraffe

而且你可以继续扩展它..

public class AfricanStripyGiraffe extends StripyGiraffe

这样一来,旧代码就可以顺利运行,并且仍然非常欢迎您尽可能多地扩展对象层次结构。当对象不够具体无法实例化时,您可以通过将它们声明为 abstract 来保持对象的完整性,并且使用此方法允许用户仍然声明。

Giraffe geoffrey = new AfricanStripyGiraffe();

关于java - 为什么具体类的一个子类可以声明为抽象的,而父类的一些方法可以被重写并声明为抽象的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24247461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com