在Java中,抽象類和接口都是面向對象編程中的重要概念。
抽象類是一個不能被實例化的類,它僅僅是為子類提供一個通用的抽象模板。抽象類中的方法可以是抽象方法(沒有實際實現)或者具體實現的方法。如果一個類繼承了抽象類,它必須重寫其所有抽象方法,否則也必須聲明為抽象類。
abstract class Animal { public abstract void makeSound(); //抽象方法 public void sleep() { //普通方法 System.out.println("睡覺zzz"); } } class Cat extends Animal { public void makeSound(){ System.out.println("喵喵"); } }
接口是一個包含了一些方法申明的純抽象類。接口中的所有方法都是public abstract方法,不能有方法實現。如果一個類實現了接口,它必須實現所有接口中的方法。
interface Animal { void makeSound(); void eat(); } class Cat implements Animal { public void makeSound() { System.out.println("喵喵"); } public void eat() { System.out.println("魚"); } }
抽象類和接口的選擇取決于具體的需要。如果需要創建一個類,并且想要為該類提供一些通用(但重要)的功能或行為,可以創建一個抽象類。如果需要定義一個外部類和實現這個類,可以使用接口。另外,Java的類只能單繼承,但可以實現多個接口,這使得接口更加靈活。