Java中的抽象类
可能重复:Java中的抽象类,java,oop,abstract-class,Java,Oop,Abstract Class,可能重复: 在爪哇 其他类从中扩展的每个类都必须是抽象类吗 如果没有,在什么条件下 更一般地说,我们什么时候才能确定一个类是抽象类 其他类从中扩展的每个类都必须是抽象类吗 否 如果一个类在其声明中包含抽象,那么它将被视为抽象 例如: public abstract class Foo{} 阅读更多信息 其他类从中扩展的每个类都必须是抽象类吗 否 如果一个类在其声明中包含抽象,那么它将被视为抽象 例如: public abstract class Foo{} 阅读更多信息 绝对
在爪哇 其他类从中扩展的每个类都必须是抽象类吗 如果没有,在什么条件下 更一般地说,我们什么时候才能确定一个类是抽象类 其他类从中扩展的每个类都必须是抽象类吗 否 如果一个类在其声明中包含
抽象
,那么它将被视为抽象
例如:
public abstract class Foo{}
阅读更多信息
抽象
,那么它将被视为抽象
例如:
public abstract class Foo{}
阅读更多信息
绝对不是。类可以在不抽象的情况下进行扩展 通常,当需要基于其他方法定义某些方法的行为时,会将类抽象化,但不能在此类中提供这些方法的实现 例如:
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 };
}
(如果类本身不是抽象的,则类不能有抽象方法)
另一个合理的原因是该类是某个基类,被实例化没有意义。您可以指定受保护的构造函数,也可以将其抽象化。绝对不能。类可以在不抽象的情况下进行扩展 通常,当需要基于其他方法定义某些方法的行为时,会将类抽象化,但不能在此类中提供这些方法的实现 例如:
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 };
}
(如果类本身不是抽象的,则类不能有抽象方法)
另一个合理的原因是该类是某个基类,被实例化没有意义。您可以指定受保护的构造函数,也可以将其抽象化。每个类超级类都不是抽象类 例如,对象类是所有类的超类,但它不是抽象类 我们将在不希望程序员或用户创建对象的地方使用抽象类
而且还要绑定默认属性和行为,以便扩展抽象的类必须强制继承这些属性。每个类超类都不是抽象类 例如,对象类是所有类的超类,但它不是抽象类 我们将在不希望程序员或用户创建对象的地方使用抽象类
还要绑定默认属性和行为,以便扩展抽象的类必须强制继承这些属性。为了回答您的一般问题,我们可能希望类是抽象的,在其中有一些一般行为,子类有特定的实现 我在很多地方都见过它,在这些地方有一些默认的泛型行为是很好的,只有少数子类需要更改
另外,正如在另一个答案中所述,如果我们不想让用户实例化通用类,而是想强迫用户使用特定的实现,抽象会有所帮助。要回答您的一般问题,我们可能希望类是抽象的,以便在其中具有一些通用行为,子类具有特定的实现 我在很多地方都见过它,在这些地方有一些默认的泛型行为是很好的,只有少数子类需要更改
另外,正如statd在另一个答案中所说,如果我们不想让用户实例化通用类,而是想强迫用户使用特定的实现,抽象会有所帮助。每个超类都不必是抽象的,但Scott Meyer在他的“高效C++”中指出,对象层次结构中的每个非叶类都应该是抽象的。现在我们有了Java,这个概念可能应该扩展为“抽象或接口”。每个超类都不必是抽象的,但Scott Meyer在他的“有效的C++”中指出,对象层次结构中的每个非叶类都应该是抽象的。现在我们有了Java,这个概念可能应该扩展为“抽象或接口”。您可以将抽象类视为某种产品的原型版本。例如,您有一个产品的规范,并且有几种方法可以实现它们。抽象类指定了所有这些规范,但是它没有给出任何实现,因为没有默认值,它们必须由产品的各种版本(您的子类)以不同的方式实现。但是,它可能已经实现了各种产品将具有的功能
这自动意味着您不能初始化抽象类,因为它没有实现规范的某些部分。您可以将抽象类视为某种产品的原型版本。例如,您有一个产品的规范,并且有几种方法可以实现它们。抽象类指定了所有这些规范,但是它没有给出任何实现,因为没有默认值,它们必须由产品的各种版本(您的子类)以不同的方式实现。但是,它可能已经实现了各种产品将具有的功能
这自动意味着您不能初始化抽象类,因为它没有实现规范的某些部分。可能性重复我不这么认为,Damodar。这是关于抽象的需要,而不是概念的意义。我同意Urs Reupke。请再次检查这个问题“更一般地说,我们什么时候才能确定一个类是抽象类?”通过观察java.lang.Object不是抽象的,很容易回答第一个问题…可能性重复我不这么认为,达莫达尔。这是关于