教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

接口和抽象類有什么區(qū)別?

更新時間:2023年03月27日10時29分 來源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

  接口和抽象類是面向?qū)ο缶幊讨械膬煞N重要的概念,它們都可以用來實現(xiàn)多態(tài)性,但是它們有一些不同之處。

  接口是一種定義了一組方法的抽象類型,但是沒有提供任何具體的實現(xiàn)。在接口中,所有的方法都是抽象方法,沒有方法體,只有方法名和參數(shù)列表。接口可以被實現(xiàn)(implement)到類中,從而強制實現(xiàn)類中的所有方法。一個類可以實現(xiàn)多個接口。下面是一個接口的例子:

public interface Shape {
    double area();
    double perimeter();
}

  抽象類是一個不能被實例化的類,它的目的是被其他類繼承。抽象類中可以包含實現(xiàn)的方法,也可以包含抽象的方法,即沒有實現(xiàn)的方法。如果一個類繼承了一個抽象類,那么它必須要實現(xiàn)抽象類中的所有抽象方法。下面是一個抽象類的例子:

public abstract class Animal {
    private String name;

    public Animal(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public abstract String makeSound();
}

  區(qū)別:

  1.接口只能定義方法,而抽象類可以定義方法和屬性。

  2.接口中的方法都是抽象方法,即沒有方法體,而抽象類中可以有具體的實現(xiàn)方法和抽象方法。

  3.一個類可以實現(xiàn)多個接口,但只能繼承一個抽象類。

  4.接口中的方法默認都是public的,而抽象類中的方法可以有不同的訪問修飾符。

  下面是一個例子,展示了如何定義和使用接口和抽象類:

interface Vehicle {
    void start();
    void stop();
}

abstract class Car implements Vehicle {
    private String name;

    public Car(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void start() {
        System.out.println("The car has started.");
    }

    public abstract void drive();
}

class Toyota extends Car {
    public Toyota(String name) {
        super(name);
    }

    public void drive() {
        System.out.println("The Toyota is driving.");
    }

    public void stop() {
        System.out.println("The Toyota has stopped.");
    }
}

  在上面的例子中,Vehicle是一個接口,Car是一個抽象類,Toyota是一個繼承自Car并實現(xiàn)了Vehicle接口的具體類。Toyota類必須實現(xiàn)Car類中的抽象方法drive(),同時也要實現(xiàn)Vehicle接口中的所有方法。

0 分享到:
和我們在線交談!