摘要:抽象類使用 abstract 關(guān)鍵字修飾,該類即為抽象類。抽象類的作用:1、某些情況下,父類約束子類必須包含哪些方法,但不知道子類如何去實現(xiàn)這些方法。2、可以從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類作為子類的模板,避免子類設計的隨意性。抽象類的使用規(guī)則:1、使用 abstract 定義抽象對象;2、abstract 定義抽象方法,只有聲明,不需要實現(xiàn);3、包含抽象
抽象類使用 abstract 關(guān)鍵字修飾,該類即為抽象類。
抽象類的作用:
1、某些情況下,父類約束子類必須包含哪些方法,但不知道子類如何去實現(xiàn)這些方法。
2、可以從多個具有相同特征的類中抽象出一個抽象類,以這個抽象類作為子類的模板,避免子類設計的隨意性。
抽象類的使用規(guī)則:
1、使用 abstract 定義抽象對象;
2、abstract 定義抽象方法,只有聲明,不需要實現(xiàn);
3、包含抽象方法的類是抽象類;
4、抽象類中可以包含普通的方法,也可以沒有抽象方法;
5、抽象類不能直接創(chuàng)建,可以定義引用變量,指向子類對象;
首先先創(chuàng)建一個抽象類:
public abstract class Telephone { //打電話 public abstract void call(); //發(fā)短信 public abstract void sendMessage(); }
接著分別創(chuàng)建兩個子類繼承該父類,子類必須包含父類所聲明的抽象方法,否則會報錯:
public class CellPhone extends Telephone{ public void call(){ System.out.println("通過鍵盤來打電話"); } public void sendMessage() { System.out.println("通過鍵盤來發(fā)短信"); } }
public class SmartPhone extends Telephone{ public void call(){ System.out.println("通過語音來打電話"); } public void sendMessage() { System.out.println("通過語音來發(fā)短信"); } }
再創(chuàng)建一個測試類:
public class Test { public static void main(String[] args) { //普通手機 Telephone cellphone = new CellPhone(); cellphone.call(); //通過鍵盤來打電話 cellphone.sendMessage(); //通過鍵盤來發(fā)短信 //智能手機 Telephone smartphone = new SmartPhone(); smartphone.call(); //通過語音來打電話 smartphone.sendMessage(); //通過語音來發(fā)短信 } }
Java中的接口被用來繼承,必為abstract,一般為public,且內(nèi)部為常量和抽象方法,一個類可以實現(xiàn)多個接口。
首先創(chuàng)建一個新的接口:
public interface IPlayGame { public String todo = "可以玩游戲"; public void playGame();
將SmartPhone類改寫為:
public class SmartPhone extends Telephone implements IPlayGame{ protected String name = "智能手機"; public void call(){ System.out.println("通過語音來打電話"); } public void sendMessage() { System.out.println("通過語音來發(fā)短信"); } @Override public void playGame() { System.out.println(name + todo); } }
實例化并輸出:
IPlayGame sp = new SmartPhone(); sp.playGame(); //智能手機可以玩游戲
在接口在使用過程當中,還經(jīng)常與匿名內(nèi)部類配合使用,匿名內(nèi)部類就是沒有名字的內(nèi)部類,多用于關(guān)注實現(xiàn)而不關(guān)注實現(xiàn)類的名稱。
//第一種實現(xiàn)方法IPlayGame ip1 = new IPlayGame() { @Override public void playGame() { System.out.println("匿名內(nèi)部類的方法實現(xiàn)接口" + todo); //匿名內(nèi)部類的方法實現(xiàn)接口可以玩游戲 } }; ip1.playGame(); //調(diào)用接口方法//第二種實現(xiàn)方法new IPlayGame() { @Override public void playGame() { System.out.println("匿名內(nèi)部類的方法實現(xiàn)接口" + todo); //匿名內(nèi)部類的方法實現(xiàn)接口可以玩游戲 } }.playGame();