接口的實現,接口的定義,繼承與接口的區別html
內容:繼續完善上次的大做業。
注意: 再過幾回課要講Java圖形界面編程,到時候要將該系統升級爲圖形界面。系統的業務邏輯部分應該變化不大,變化較大的地方的是輸入與輸出部分。編碼的時候,請不要將處理輸入(System.in)與輸出(System.out)的代碼與某個業務處理方法綁死。java
做業提交結構以下:git
學生 | 負責任務 | 博客地址 |
---|---|---|
張雨陽 | 購物車類,登陸類 | 博客地址 |
李鐸 | 商品類,用戶類 | 博客地址 |
項目碼雲地址(點擊後要求可直接跳到該項目首頁)。
碼雲
把兩我的的類上傳到同一個項目中還不會,因此我先完整的傳到本身的碼雲中編程
類圖繪製參考資料:
數組
上次沒有實現用戶的註冊與登陸,此次加入了登陸類購物車類等功能,因爲我能力不強,因此大部分靠合做同窗,謝謝張雨陽大佬框架
因爲對類之間關係不是很理解,可是有一個想法:能不能把登陸這個功能寫到用戶類中,而不用再寫一個登陸類ide
改造前使用scanner,在操做上有許多方法能夠直接用,比較方便,但只能從控制檯得到輸入,不靈活。函數
改造後使用抽象類和抽象方法,抽象類不能實例化對象,因此必需要有子類來實現它以後才能使用。
這樣就能夠把一些具備相同屬性和方法的組件進行抽象,這樣更有利於代碼和程序的維護。學習
抽象類好處在於能夠有多種子類的實現方法,好比以前PTA上的圖形類,不一樣的子類對應有不一樣的求面積方法,
實現方法在父類中不具體的就適合聲明爲abstract,而方法細節已經能夠在類中實現的就不須要聲明爲abstractthis
變化的是輸入輸出的方法,不變的是程序始終實現了猜數字這一功能,abstract可讓輸入輸出的方法變得更加多樣
我對於接口的理解相似於抽象類中的父類,有接口(繼承)就可使用接口對應的方法(父類方法聲明)
class PersonSortable implements Comparable<PersonSortable>
PersonSoetable實現了compareable接口,arrays繼承自object超級父類且也有相同的compareable接口,就可使用arrays.sort方法
不過在具體實現代碼上可能須要修改,因爲題目要求對年齡進行排序,因此在compareTo方法體中須要修改爲age斷定大小:
public int compareTo(PersonSortable o){
if(this.name.compareTo(o.name)==0){
if(this.age==o.age)
return 0;
if(this.age>o.age)
return 1;
if(this.age<o.age)
return -1;
}
Arrays.sort能夠對全部實現Comparable的對象進行排序。但若是有多種排序需求,若有時候需對name
進行降序排序,有時候只須要對年齡進行排序。使用Comparable沒法知足這樣的需求。能夠編寫不一樣的
Comparator來知足多樣的排序需求。以下就是對年齡和名字進行的排序
class AgeComparator implements Comparator
@Override public int compare(PersonSortable1 o1, PersonSortable1 o2) { int n=0; if(o1.getAge()>o2.getAge()) n=1; else if(o1.getAge()==o2.getAge()) n=0; else if(o1.getAge()<o2.getAge()) n=-1; return n; }
class NameComparator implements Comparator
public int compare(PersonSortable1 o1, PersonSortable1 o2) { // TODO Auto-generated method stub return o1.getName().compareTo(o2.getName()); }
像是計算周長面積這類的方法就須要聲明爲abstract,雖然都是形狀類,但圓形和正方形的周長面積的計算方法
顯然不一樣,在父類中就沒法具體實現,須要在子類中實現
在父類實現比較好,父類一旦修改子類也會一塊兒修改,在父類實現一個藉口,子類也會繼承同接口,代碼量更少
面向Comparable接口編程只須要在實現接口的前提下根據比較對象的不一樣重寫代碼就能很方便的對不一樣對象進行排序
面向父類編程好處是父類只須要方法名,具體方法體在子類中再作區別實現,兩種方法都能提升代碼的複用率
定義了三種抽象方法:顯示學生信息,讀取學生信息,寫入學生信息。
用於爲不一樣的存儲方法定義共有方法,便於後期的實現。
共同處:
1.都存儲學生信息
2.都實現了StudentDao接口
3.實現了其中的抽象方法。
不一樣:
StudenDaoListImpl使用ArrayList來存儲學生信息
StudentDaoArrayImpl則是使用數組來存儲學生信息。
以題目四爲例,學生信息的存儲方式,能夠是數組儲存也能夠是arraylist儲存,經過建立不一樣的對象來實現不一樣的
存儲方法,其實現的功能都是同樣的,將兩種方法抽象成一個接口,根據類的不一樣來決定實現方法
。
面向接口編程就是指系統中的類和模塊之間的交互由接口完成。
好處:
經過接口中的抽象方法,咱們能夠應用在更多的地方,對不一樣的對象可使用不一樣的實現方法來實現。
提升了編程的靈活性。。
經過接口可使系統的獨立性加強,便於後期的維護和擴展。
題目集:[jmu-Java-03-面向對象1-基礎-封裝繼承]
本週完成(形狀-繼承,覆蓋)
須要有兩張圖(1. 排名。2.PTA提交列表)
3.3 統計本週完成的代碼量
周次 | 總代碼量 | 新增代碼量 | 總文件數 | 新增文件數 |
---|---|---|---|---|
1 | 73 | 73 | 2 | 2 |
2 | 281 | 281 | 9 | 9 |
3 | 908 | 908 | 16 | 16 |
4 | 1122 | 214 | 16 | 16 |
5 | 1557 | 435 | 32 | 11 |