2012-03-04 72 views
2
abstract public class car 
{ 
    abstract void drive(); 
} 

就像上面的代码片断一样,Java中抽象方法的目的究竟是什么?根据我的理解,根据定义,他们不允许有机构。抽象方法的目的是什么?

+0

对不起...我的投票关闭不对。 – 2012-03-04 15:46:34

回答

3

当你让事情实现同一个抽象类时,你说的这些东西在高层次上是一样的,但是他们在做事情的方式上有所不同。抽象方法就是你如何说:“这是扩展这个类的所有事情必须做的事情,但是他们每个人都可以指定它们将如何完成它。”

0

强制任何从它继承的非抽象类来实现该方法,类似于一个接口。

2

抽象方法应该在这个抽象类的子类中实现。例如,您的课程名为Shape,它有一个draw()方法。你不能实现这个方法的Shape类,因为你不知道如何画一个Shape,所以你把它做成abstract。当你创建Triangle类时,你可以确定如何绘制Triangle,并且你可以实现draw()方法。希望这可以帮助。

+0

这是一个方面。另一个是对Shapes的一般知识。例如,如果您将几个放入某种Collection中,无论如何,如果一个当前处理的Shape是一个Triangle,一个Circle或其他类型,您知道它有一个名为“draw()”的方法。还有一件事,这可能会增加对此的理解:在问题中,抽象类很可能被称为“车辆”而不是汽车。而“汽车”可能是其中一个实现。 – 2012-03-04 15:50:02

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 
} 
0

摘要可用作“形状”类,其中列出的所有方法(如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 } 
} 

希望你明白!

相关问题