簡體   English   中英

抽象方法的目的是什么?

[英]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.");
    }
}

未能提供實現將導致編譯錯誤。

現在,從這個例子中你可以很容易地看到,因為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
}

當你把事物實現為同一個抽象類時,你會說,這些事情在很高的層次上是相似的,但它們在如何做事情的細節上有所不同。 一個抽象的方法就是你怎么說,“這是擴展這個類的所有東西必須做的事情,但是他們每個人都要指明他們將如何做到這一點。”

抽象方法應該在這個抽象類的子類中實現。 例如,您的類名為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM