Abstract class in Java
Possible Duplicate:
Abstract class in Java
在Java中,
其他类所扩展的每个类都必须是抽象类吗?
如果没有,在什么条件下?
一般来说,我们什么时候才能确定类是抽象类?
绝对不是。类可以在不抽象的情况下进行扩展。
通常,当需要基于其他方法定义某个方法的行为时,可以将类抽象化,但不能在此类中提供这些方法的实现。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public abstract class Vehicle { public void goHome() { move(getHome()); } public abstract void move(); } class Car extends Vehicle { @Override public void move() { //use engine }; } class Bicycle extends Vehicle { @Override public void move() { //use pedals }; } |
(如果类本身不是抽象的,则类不能有抽象方法)。
另一个有效的原因是类是某个基类,实例化它是没有意义的。可以指定受保护的构造函数,也可以将其抽象化。
Does every class that other classes extends from must be an abstract class?
不
如果一个类在其声明中包含
例如:
1 | public abstract class Foo{} |
多读
- 抽象类
您可以将抽象类看作某种产品的原型版本。例如,您有一个产品的规范,有几种方法可以实现它们。抽象类指定了所有这些规范,但是它没有给出任何实现,因为没有默认值,它们必须由产品的所有版本(子类)以不同的方式实现。然而,它可能已经实现了产品的所有类型的特性。
这自动意味着您不能初始化抽象类,因为它不实现规范的某些部分。
每一个超级类都不需要抽象,但是Scott Meyer在他的"有效C++"中认为对象层次结构中的每个非叶类都应该是抽象的。既然我们有Java,这个概念应该扩展到阅读"抽象或接口"。
每个类都不是抽象类。
例如,对象类是所有类的超级类,但它不是抽象的。
我们将在不希望程序员或用户创建对象的地方使用抽象类。
还可以绑定默认属性和行为,以便扩展抽象的类必须强制继承该属性。
为了回答您的一般问题,我们可能希望类是抽象的,在它和子类中有一些一般的行为,以具有特定的实现。
我已经在很多地方看到过它,在这些地方它有一些默认的通用行为,只有少数子类需要更改。
另外,正如另一个答案中的statd所述,如果我们不希望用户实例化常规类,但希望强迫他使用特定的实现,那么abstract会有所帮助。