抽象方法的目的是什么?

时间:2012-03-04 15:35:28

标签: java polymorphism override abstract

abstract public class car 
{   
    abstract void drive();
}

与上面的代码片段一样,Java中抽象方法的目的究竟是什么?根据我的定义,根据定义,他们不允许拥有尸体。

5 个答案:

答案 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.");
    }
}

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

现在,从这个示例中您可以很容易地看到,因为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
}

答案 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 }
}

希望你明白!