2012-03-04 323 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 } 
} 

希望你明白!

相關問題