Java中,借口和抽象類都是用來實現面向對象編程中的抽象思想的工具。雖然它們的功能有所不同,但是它們都有一些共同點,比如都不能直接實例化,必須通過子類來實現具體功能。
抽象類是一種具有抽象方法的類,抽象方法沒有具體的實現,而是由子類來實現具體的功能。抽象方法用abstract關鍵字進行聲明,抽象類用abstract修飾符來修飾。而一個抽象類可以包含普通方法和抽象方法。代碼實現如下:
abstract class Animal { public void eat() { System.out.println("Animal is eating"); } abstract public void move(); } class Cat extends Animal { public void move() { System.out.println("Cat is moving"); } }
接口是一種抽象方法的集合,接口中的所有方法都是抽象的,并且在接口中不能含有普通方法。接口中的抽象方法不用abstract關鍵字來修飾,而是直接定義。接口中的方法默認都是public和abstract的,接口用interface關鍵字來修飾。接口可以被類實現,一個類可以實現多個接口,實現這些接口中的方法。代碼實現如下:
interface Sport { public void run(); public void jump(); } class Student implements Sport { public void run() { System.out.println("Student is running"); } public void jump() { System.out.println("Student is jumping"); } }
在使用上,抽象類適合用于描述一類事物中的公共性質,而接口適合用于定義類型的行為和操作,可以更好的實現類的多態性。