抽象類和抽象方法
抽象方法
在面向對象程式設計語言中抽象方法指一些隻有方法聲明而沒有具體方法體的方法抽象方法一般存在于抽象類或接口中。
java中,抽象方法就是以 abstract 修飾的方法,隻需要聲明而不需要實作

abstract void f();
抽象類
包含抽象方法的類叫抽象類。
abstract class Sample {
private int param1;
abstract void f1();
void f2() {}
}
注:
1、如果一個類包含有抽象方法,則必須限定為抽象類,否則編譯器會報錯。
2、抽象類不能執行個體化,否則編譯器會報錯。
接口
什麼是接口
java中,接口是以 interface 來修飾的。
接口可以被視為一個比“抽象類”更加抽象的類。
實作接口
一個類遵循某個特定或一組接口,必須使用 implements 關鍵字。
interface Fly {
void fly();
class Bird implements Fly {
@Override
public void fly() {
System.out.println("展翅飛翔");
}
注:接口中的方法必須是 public 類型,可以不顯示地指定。但是如果指定為其他類型,編譯器會報錯。
擴充接口
玩過遊戲的朋友們,肯定熟悉這個模式。
一名戰士需要具備戰鬥能力。一名騎士不僅需要具備戰鬥能力,也需要具備騎術。
更進階的聖騎士則還需要具備法師一般的魔法能力。這個關系可以抽象成以下代碼:
interface Warrior {
void fight();
interface Knight extends Warrior {
void riding();
interface Enchanter {
void magic();
// Paladin類實作多個接口,需要包含這些接口的所有方法
class Paladin implements Knight, Enchanter {
public void fight() {}
public void riding() {}
public void magic() {}
多重繼承
請考慮如下圖的情況,一名在職研究所學生既是職工,也是學生,也是研究所學生。如果我們要在代碼中實作這個繼承關系,該如何去做?
C++中支援多重繼承,但是JAVA中不支援多重繼承,以下方式是錯誤的。一個類不能擴充多個類。
class Person {};
class Student extends Person {};
class Postgraduate extends Student {};
class Employee extends Person {};
class OnJobPostgraduate extends Postgraduate, Employee {};
JAVA中雖然不支援多重繼承,但是可以通過接口實作類似的行為。一個類可以實作多個接口。
interface Person {};
interface Student extends Person {};
interface Postgraduate extends Student {};
interface Employee extends Person {};
class OnJobPostgraduate implements Postgraduate, Employee {};