更新時(shí)間:2023年03月27日10時(shí)29分 來源:傳智教育 瀏覽次數(shù):
接口和抽象類是面向?qū)ο缶幊讨械膬煞N重要的概念,它們都可以用來實(shí)現(xiàn)多態(tài)性,但是它們有一些不同之處。
接口是一種定義了一組方法的抽象類型,但是沒有提供任何具體的實(shí)現(xiàn)。在接口中,所有的方法都是抽象方法,沒有方法體,只有方法名和參數(shù)列表。接口可以被實(shí)現(xiàn)(implement)到類中,從而強(qiáng)制實(shí)現(xiàn)類中的所有方法。一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。下面是一個(gè)接口的例子:
public interface Shape { double area(); double perimeter(); }
抽象類是一個(gè)不能被實(shí)例化的類,它的目的是被其他類繼承。抽象類中可以包含實(shí)現(xiàn)的方法,也可以包含抽象的方法,即沒有實(shí)現(xiàn)的方法。如果一個(gè)類繼承了一個(gè)抽象類,那么它必須要實(shí)現(xiàn)抽象類中的所有抽象方法。下面是一個(gè)抽象類的例子:
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.接口中的方法都是抽象方法,即沒有方法體,而抽象類中可以有具體的實(shí)現(xiàn)方法和抽象方法。
3.一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類。
4.接口中的方法默認(rèn)都是public的,而抽象類中的方法可以有不同的訪問修飾符。
下面是一個(gè)例子,展示了如何定義和使用接口和抽象類:
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是一個(gè)接口,Car是一個(gè)抽象類,Toyota是一個(gè)繼承自Car并實(shí)現(xiàn)了Vehicle接口的具體類。Toyota類必須實(shí)現(xiàn)Car類中的抽象方法drive(),同時(shí)也要實(shí)現(xiàn)Vehicle接口中的所有方法。
北京校區(qū)