良好做法告诉我们有关非继承抽象类的内容是什么?
它们是否有理由存在于不旨在提供API的程序中?将这些类系统地转换为非抽象类是否有意义?如果是这样的话?
答案 0 :(得分:2)
好吧,abstract
关键字禁止创建信息(为了创建一个必须从抽象类继承的实例),然而, abstract 类可以有 static 方法,例如
// abstract: there's no sence in creating an instance of this class
abstract class MathLibrary {
// private: there's no sence in inheriting from this class
private MathLibrary() {}
// Gamma function
public static double gamma(double value) { ... }
...
}
请注意,当不允许使用Java abstract final class
时,在C#中abstract sealed class
为static class
:
// C# static == abstract sealed
public static class MathLibrary {
// Gamma function
public static double Gamma(double value) { ... }
...
}
答案 1 :(得分:1)
简答:
用于创建Abstract
类的唯一原因是继承他们。
注意:这就是为什么我们无法使用abstract
和final
关键字的组合创建一个类或方法因为final
类不能被子类化。
答案 2 :(得分:0)
将它们转换为非抽象类也不会有用,因为......你没有使用它们。
抽象类是构建的蓝图,它不应该被实例化。也许在哪里有一个匿名类扩展它? 但在那里,意味着它们可以在将来使用,所以删除它们可能不是你追求的好主意。
答案 3 :(得分:0)
也许你可以使用它们作为模板在运行时通过反射等继承......(但这也是继承)。
答案 4 :(得分:0)
“非继承的抽象类”
这完全打败了抽象类的全部观点。抽象类的想法是构建其他类的蓝图。
例如,您可以构建一个Car抽象类,然后从该类继承以创建不同的Car Brands类,这些类会自动拥有Car所拥有的所有内容,但每个Brand都不同。这样,您就可以避免在每个汽车品牌中编写可以在Car中编写的所有实例变量和方法。
另外请记住,你不能创建一个Car实例,因为它不可能让一辆车没有品牌,所以让Car抽象是有意义的。