【发布时间】:2012-03-22 07:22:26
【问题描述】:
abstract public class car
{
abstract void drive();
}
和上面的sn-p代码一样,Java中抽象方法的目的到底是什么?据我所知,根据定义,他们不允许拥有身体。
【问题讨论】:
-
对不起...我的投票结束不正确。
标签: java polymorphism overriding abstract
abstract public class car
{
abstract void drive();
}
和上面的sn-p代码一样,Java中抽象方法的目的到底是什么?据我所知,根据定义,他们不允许拥有身体。
【问题讨论】:
标签: java polymorphism overriding abstract
强制任何继承自它的非抽象类实现该方法,类似于接口。
【讨论】:
抽象方法应该在这个抽象类的子类中实现。例如,您的类名为Shape,它有一个draw() 方法。你不能为Shape 类实现这个方法,因为你真的不知道如何绘制Shape,所以你让它abstract。当您创建扩展 Shape 的 Triangle 类时 - 您确定如何绘制 Triangle 并且可以实现 draw() 方法。希望这会有所帮助。
【讨论】:
通过声明方法抽象,您并没有提供实现,而是强制扩展car 类的具体类为该方法提供实现。示例:
abstract public class Car {
abstract void drive();
}
public class Audi extends Car {
void drive() {
System.out.println("I'm an Audi.");
}
}
public class Volvo extends Car {
void drive() {
System.out.println("I'm a Volvo.");
}
}
未能提供实现会导致编译错误。
现在,从这个例子中你可以很容易地看到,因为Audi 和Volvo 的实例都可以放在期望Car 的地方,你可以在运行时插入不同的行为(这称为多态性) :
void driveCar(Car car) {
car.drive();
}
void testDrive() {
driveCar(new Audi()); // prints I'm an Audi
driveCar(new Volvo()); // prints I'm a Volvo
}
【讨论】:
Abstract 作为“形状”类工作,其中列出的所有方法(如 drive() )都必须实现,否则编译程序时会出现一些错误。 这种类不能实例化,所以需要继承这个类,实例化所有的抽象方法。 使用 abstract 的优点是,您可以将抽象类作为形状类,您可以将其继承到某些类而无需重写您的方法,因为它们已经存在。不要将 rewrite 与 implemente 混淆,因为您必须实现这些方法。 一个例子: 你有一个动物类:
abstract public class Animal{
abstract void eat();
abstract void walk();
}
所以,如果你继承这个,你将需要自动实现这个方法。见下文:
public class Horse extends Animal{
void eat() { //place the eating code }
void walk() { /// place the walking code }
}
希望你能理解!
【讨论】:
当你让事物实现同一个抽象类时,你是在说,这些事物在高层次上是相似的,但是它们在如何做事的细节上有所不同。抽象方法就是您所说的“这是扩展此类的所有事情都必须做的事情,但他们每个人都可以指定他们将如何做到这一点。”
【讨论】: