[英]What is the purpose of an abstract method?
abstract public class car
{
abstract void drive();
}
與上面的代碼片段一樣,Java中抽象方法的目的究竟是什么? 根據我的定義,根據定義,他們不允許擁有屍體。
通過聲明方法抽象,您沒有提供實現,但是您正在強制擴展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
}
當你把事物實現為同一個抽象類時,你會說,這些事情在很高的層次上是相似的,但它們在如何做事情的細節上有所不同。 一個抽象的方法就是你怎么說,“這是擴展這個類的所有東西必須做的事情,但是他們每個人都要指明他們將如何做到這一點。”
抽象方法應該在這個抽象類的子類中實現。 例如,您的類名為Shape
,它有一個draw()
方法。 您無法為Shape
類實現此方法,因為您實際上不知道如何繪制Shape
,因此您將其設為abstract
。 當你創建,例如,擴展Shape
Triangle
類時 - 你確定如何繪制一個Triangle
,你可以實現draw()
方法。 希望這可以幫助。
強制從其繼承的任何非抽象類實現該方法,類似於接口。
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 }
}
希望你能理解 !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.