abstract public class car
{
abstract void drive();
}
与上面的代码片段一样,Java中抽象方法的目的究竟是什么?根据我的定义,根据定义,他们不允许拥有尸体。
答案 0 :(得分:3)
通过声明方法抽象,您没有提供实现,但是您正在强制扩展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
}
答案 1 :(得分:3)
当你把事物实现为同一个抽象类时,你会说,这些事情在很高的层次上是相似的,但它们在如何做事情的细节上有所不同。一个抽象的方法就是你怎么说,“这是扩展这个类的所有东西必须要做的事情,但是他们每个人都要指明他们将如何做到这一点。”
答案 2 :(得分:2)
抽象方法应该在这个抽象类的子类中实现。例如,您的类名为Shape
,并且它具有draw()
方法。您无法为Shape
课程实施此方法,因为您实际上不知道如何绘制Shape
,因此您将其设为abstract
。当您创建Triangle
扩展Shape
的类时,您确定如何绘制Triangle
,并且可以实现draw()
方法。希望这会有所帮助。
答案 3 :(得分:0)
强制从其继承的任何非抽象类实现该方法,类似于接口。
答案 4 :(得分:0)
Abstract用作“形状”类,必须实现列出的所有方法(如drive()),否则您将看到编译程序时出现的一些错误。 这种类无法实例化,因此您需要继承此类并实例化所有抽象方法。 使用抽象的优点是,您可以将抽象类作为形状类,您可以继承某些类,而无需重写您的方法,因为它们已经存在。不要将重写与实现混淆,因为您必须实现此方法。 一个例子: 你有一个动物类:
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 }
}
希望你明白!