abstract public class car
{
abstract void drive();
}
就像上面的代码片断一样,Java中抽象方法的目的究竟是什么?根据我的理解,根据定义,他们不允许有机构。抽象方法的目的是什么?
abstract public class car
{
abstract void drive();
}
就像上面的代码片断一样,Java中抽象方法的目的究竟是什么?根据我的理解,根据定义,他们不允许有机构。抽象方法的目的是什么?
当你让事情实现同一个抽象类时,你说的这些东西在高层次上是一样的,但是他们在做事情的方式上有所不同。抽象方法就是你如何说:“这是扩展这个类的所有事情必须做的事情,但是他们每个人都可以指定它们将如何完成它。”
强制任何从它继承的非抽象类来实现该方法,类似于一个接口。
抽象方法应该在这个抽象类的子类中实现。例如,您的课程名为Shape
,它有一个draw()
方法。你不能实现这个方法的Shape
类,因为你不知道如何画一个Shape
,所以你把它做成abstract
。当你创建Triangle
类时,你可以确定如何绘制Triangle
,并且你可以实现draw()
方法。希望这可以帮助。
这是一个方面。另一个是对Shapes的一般知识。例如,如果您将几个放入某种Collection中,无论如何,如果一个当前处理的Shape是一个Triangle,一个Circle或其他类型,您知道它有一个名为“draw()”的方法。还有一件事,这可能会增加对此的理解:在问题中,抽象类很可能被称为“车辆”而不是汽车。而“汽车”可能是其中一个实现。 – 2012-03-04 15:50:02
通过声明方法摘要,您并未提供实现,但您正在强制扩展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
}
摘要可用作“形状”类,其中列出的所有方法(如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 }
}
希望你明白!
对不起...我的投票关闭不对。 – 2012-03-04 15:46:34