[英]What is the purpose of an abstract method?
abstract public class car
{
abstract void drive();
}
与上面的代码片段一样,Java中抽象方法的目的究竟是什么? 根据我的定义,根据定义,他们不允许拥有尸体。
通过声明方法抽象,您没有提供实现,但是您正在强制扩展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
}
当你把事物实现为同一个抽象类时,你会说,这些事情在很高的层次上是相似的,但它们在如何做事情的细节上有所不同。 一个抽象的方法就是你怎么说,“这是扩展这个类的所有东西必须做的事情,但是他们每个人都要指明他们将如何做到这一点。”
抽象方法应该在这个抽象类的子类中实现。 例如,您的类名为Shape
,它有一个draw()
方法。 您无法为Shape
类实现此方法,因为您实际上不知道如何绘制Shape
,因此您将其设为abstract
。 当你创建,例如,扩展Shape
Triangle
类时 - 你确定如何绘制一个Triangle
,你可以实现draw()
方法。 希望这可以帮助。
强制从其继承的任何非抽象类实现该方法,类似于接口。
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 }
}
希望你能理解 !
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.