|關鍵詞:|接口|內部類|
內部類:成員內部類、局部內部類、靜態內部類、匿名內部類
成員內部類:該類依附與外部類而存在,可無條件訪問外部類的全部成員屬性和成員方法
局部內部類:定義在一個做用域或方法中的類,訪問權限僅做用在該域和方法中
靜態內部類:不依賴與外部類,不能使用外部類的非靜態的變量或方法
匿名內部類:爲解決臨時繼承某個類或操做某個接口時創建實例的需求
注意: 再過幾回課要講Java圖形界面編程,到時候要將該系統升級爲圖形界面。系統的業務邏輯部分應該變化不大,變化較大的地方的是輸入與輸出部分。編碼的時候,請不要將處理輸入(System.in)與輸出(System.out)的代碼與某個業務處理方法綁死。
參考資料:javascript
成員 | 負責任務 | 博客地址 |
---|---|---|
陳錦霞 | 商品 | https://www.cnblogs.com/chenjinxia456/ |
鍾其均 | 購物車 | https://www.cnblogs.com/zhongqijun2468/ |
class Cart{//購物車類 ArrayList<Commodity> shoppinglist = new ArrayList<>(); private double Totalprice=0; private int num=0; public boolean addCommodity(Commodity commodity,int num){// if(shoppinglist.add(commodity)) num++; return true; } public double getTotalprice(){//商品總價格 for(int i;i<num;i++){ Totalprice += shoppinglist.get(i).getNum() * shoppinglist.get(i).getPrice(); } return Totalprice; } public boolean DeleteCommodity(Commodity commodity) {//刪除商品 if(shoppinglist.contains(commodity)) { shoppinglist.remove(commodity); return true; } else return false; } public void ClearCart(){//清空購物車 shoppinglist.clear(); } } public class Main5{ private static Object commodity; public static void main(String[] args) { Scanner in = new Scanner(System.in); Cart cart = new Cart(); int choice=0; Commodity flag=null; Commodity[] commodity = new Commodity[2]; commodity[0]=new Commodity("機械鍵盤",598,1); commodity[1]=new Commodity("java課本",89,1); for(int j = 0; j < 10; j++){ choice = welcome(); if(choice == 0) break; Scanner sc; switch(choice){ case 1 : menu1(commodity); System.out.print("選擇:"); String Name = sc.next(); System.out.println(flag = search1(Name, commodity)); System.out.println(); break; case 2 : System.out.println("所選商品爲: 「" + flag + "」"); System.out.print("加入數量:"); int num = sc.nextInt(); flag.setNum(num); cart.addCommodity(flag, num); System.out.println("加入成功!"); System.out.println(); break; case 3: System.out.println(cart); System.out.println("總價: " + cart.getTotalprice()); System.out.println(); } } } public static int welcome(){ Scanner sc = new Scanner(System.in); System.out.println("********歡迎光臨********"); System.out.println("******1.查找商品*******"); System.out.println("******2.添加商品*******"); System.out.println("******3.去購物車*******"); System.out.println("******0.退出系統*******"); System.out.print("choice = "); int choice = sc.nextInt(); return choice; } public static void menu1(Commodity[] commodity){ for(Commodity i : commodity){ System.out.println(i); } } public static Commodity search1(String Name, Commodity[] product){ for(Commodity i :product){ if(i.getName().equals(Name)) return i; } return null; } }
跟上次比起來就多了一個搜索的功能,而後把登陸類改爲了方法,提供登陸操做的應該是商城。有待改進: 用戶進行註冊後,擁有了其購物車,如今沒法對用戶的錢包進行查看和修改,缺乏圖形界面
改造前:與控制進行了捆綁,若用戶想要操做則必須在控制檯下
改造後:脫離了控制檯,使得程序更有廣泛性能夠用於不一樣環境
當一個方法沒有具體的實現定義,即沒有方法體只有方法名時,這時方法很抽象,就須要用abstract
當須要在多種界面時運行或者輸入輸出,就能夠把方法抽象化
變化的是數據的輸出輸入的方式,改造前只能從控制檯輸入輸出,改造後還能夠從對話框之類的界面輸入輸出
不變的是這個遊戲的功能,依舊是猜數字
Comparable接口一個compareTo方法,能夠用來對實現他的每一個類的對象進行總體排序,當使用Arrays.sort時,會調用compareTo()方法,則能夠對該類型進行排序
Comparable接口一個compareTo方法,能夠用來對實現他的每一個類的對象進行總體排序,當使用Arrays.sort時,會調用compareTo()方法,則能夠對該類型進行排序
Comparable:只能以固定的形式進行排序 而Comparator:可根據須要建立多種排序方式
Rectangle,Cirlce都 IS Shape,都要進行求周長和求面積的計算,,這些是他們共有的行爲,但這些行爲在Rectangle,Cirlce中的具體實現又不同,這時咱們須要把這些行爲抽離出來造成一份共有的協議。
在Shape上實現Comparable接口比較好,由於是多態只給出關鍵代碼:
面向Comparable接口編程,它的實現類只須要對該接口的compareTo方法重寫,就能夠實現咱們要的功能
在題目3中要對兩種圖形進行排序,父類Shape實現接口,就能夠重寫compareTo方法和使用ArrayList.sort排序java
提供了三個抽象的方法,分別是writeStudent()、readStudent()和diplayAllStudent(),分別用來寫入學生信息,讀取學生信息和展現全部學生的信息
private List<Student> students = new ArrayList<Student>();
是StudenDaoListImpl中的語句,可看出StudenDaoListImpl使用ArrayList來存放學生的信息,而StudentDaoArrayImpl是利用數組來存放學生的信息。查看ArrayList的源代碼發現實際上ArrayList又是利用數組實現的編程
接口也是定義了一個協議,跟繼承不一樣的是,實現接口的條件是知足HAS-A便可。接口中的方法都是抽象的,要在其實現類中去具體的實現,不一樣的類可能具體實現的細節不一樣,是更加面向對象的一種體現。
⑴ 面向接口編程可使得全部實現接口的對象都擁有共同的行爲,使代碼與接口相關聯,而不須要考慮具體的實現類。數組
好處:面向接口編程能夠將接口與實現相分離,從而大大提升程序的靈活性。
周次 | 總行數 | 新增行數 | 總文件數 | 新增文件數 |
---|---|---|---|---|
1 | 73 | 73 | 3 | 3 |
2 | 468 | 468 | 91 | 9 |
3 | 411 | 411 | 27 | 9 |
4 | 503 | 503 | 42 | 13 |
5 | 608 | 608 | 25 | 22 |