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