繁体   English   中英

抽象方法的目的是什么?

[英]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.");
    }
}

未能提供实现将导致编译错误。

现在,从这个例子中你可以很容易地看到,因为AudiVolvo实例都可以放在预期的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM