一、什麼是抽象?抽取相同的、類似的東西出來算法
二、抽象方法:只有方法聲明,而沒有方法實現的方法,就是抽象方法網絡
在各個子類中,對於某個方法都有本身不一樣的實現,因此實現各不相同,沒法抽取,只能抽取方法的聲明上來,ide
在父類中,方法就只有方法聲明沒有方法體。就是抽象方法。學習
定義格式:this
1、沒有方法實現,連大括號都沒有,直接在方法聲明後面加上一個分號,表示方法定義結束spa
2、爲了將方法標記爲抽象方法,須要在方法前面加上一個abstract關鍵字3d
三、抽象類:能夠定義抽象方法的類code
定義格式: abstract 類名{ }對象
四、抽象類的特色 blog
一、抽象類和抽象方法都須要使用abstract關鍵字修飾
抽象類:abstract class {}
抽象方法:public abstract void test();
二、抽象類和抽象方法的關係:
抽象方法所在的類必須是抽象類
抽象類中未必必定都定義抽象方法,抽象類中未必存在抽象方法
三、抽象類的實例化(抽象類如何建立對象)
抽象類不能直接實例化
定義抽象類的子類,由子類建立對象,調用方法
四、抽象類子類的前途
在子類中,將父類全部的抽象方法所有重寫(實現),子類就成了一個普通類,就能夠建立對象
在子類中,沒有將父類中全部的抽象方法所有實現,子類就仍是一個抽象類,還須要使用abstract關鍵字 修飾子類。
五、抽象類成員的特色
一、成員變量:能夠定義變量、也能夠定義常量,但不能被抽象
二、構造方法:雖然本類沒法建立對象,可是抽象類必定有子類,子類會訪問父類的抽象方法。
是否有構造方法,不取決因而否能夠建立對象,而是取決因而否能夠定義成員變量。
若是能夠定義成員變量,那麼就須要初始化成員變量,就是構造方法來完成的。
三、成員方法:既能夠有抽象方法,也能夠存在具體方法。
既然是抽象方法,必須讓子類強制重寫,若是子類沒有重寫,子類仍是抽象類
/* * 模板方法模式:定義一個操做中的算法的骨架,將一些可變部分的實現延遲到子類中。 * 模板算法模式使子類能夠不改變一個算法的結構便可從新定義該算法的某些特定步驟。 */ public class Demo02 { public static void main(String[] args) { UserManager um = new UserManager(); um.action("admin", "add"); } } abstract class BaseManager{ public void action(String name,String method) { if("admin".equals(name)) { test(method); }else { System.out.println("你沒有操做權限,請聯繫管理"); } } public abstract void test(String method); } class UserManager extends BaseManager{ public void test(String method) { if("add".equals(method)) { System.out.println("執行了添加操做"); }else if("del".equals(method)) { System.out.println("執行了刪除操做"); } } }
一、接口的定義 interface
格式 interface 接口名{ }
二、接口中只能夠聲明抽象方法
三、類能夠去實現接口:implements
實現:接口中只定義方法名稱,在類中真正實現
四、接口的實例化:不能直接實例化
定義類,實現接口,建立子類對象,調用方法
五、接口中成員的特色
一、成員變量:只能是常量 默認public static final
二、構造方法 接口沒有構造方法
三、成員方法 只能是抽象方法,默認public abstract
六、類與類、類與接口、接口與接口的關係
類與類:單繼承 多層繼承
類與接口:類能夠實現多個接口,若是沒有實現,則是一個抽象類,它的子類必須實現,不然仍是抽象類
接口與接口:能夠單繼承、也能夠多繼承、也能夠多層繼承
類和接口的區別:
抽象類:定義物體具備的固定屬性和行爲
接口:定義物體經過學習,擴展出來的行爲
/* * 策略模式:定義一系列算法,將算法封裝起來(隱藏在接口以後),並能夠相互替換使用 * 策略模式讓算法獨立於使用它的客戶應用而獨立變化 * */ public class Demo01 { public static void main(String[] args) { // TODO Auto-generated method stub BaseService us = new UserSave(); us.setIsave(new NetSave()); us.add("user>>>"); } } interface Isave{ public abstract void save(String data); } class FileSave implements Isave{ @Override public void save(String data) { System.out.println("存到文件中"+data); } } class NetSave implements Isave{ @Override public void save(String data) { System.out.println("存到網絡中"+data); } } abstract class BaseService{ private Isave isave; public void setIsave(Isave isave) { this.isave = isave; } public void add(String data) { System.out.println("檢查數據合法性"); isave.save(data); System.out.println("數據保存完畢"); } } class UserSave extends BaseService{ }
---恢復內容結束---