第六週

1. 本週學習總結

1.1 面向對象學習暫告一段落,請使用思惟導圖,以封裝、繼承、多態爲核心概念畫一張思惟導圖或相關筆記,對面向對象思想進行一個總結。

注1:關鍵詞與內容不求多,但概念之間的聯繫要清晰,內容覆蓋面向對象的核心內容便可。

注2:顏色要少、連線不要複雜,必要的時候要在連線上進行說明。

2. 書面做業

1. clone方法

1.1 在test1包中編寫Employee類,在test2包中新建一個Test類,並在其main中新建test1包中的Employee的對象,而後使用clone方法克隆一個新對象,可否成功?爲何?

  • 不能成功,clone方法用protected修飾,只能在本包中使用。

    1.2 若是要爲自定義的類覆蓋clone方法,需注意什麼

  • 1.須要被克隆的類實現cloneable接口。2.被克隆對象若含有引用類變量時,須要實現深度克隆

    1.3 Object對象中的toString, equals, hashCode方法都使用public修飾,而clone方法卻被protected修飾,請嘗試解釋緣由。爲何不聲明爲public呢?

  • 從安全性角度來講,修飾爲public容易使得原方法和屬性容易被改變。

    2. 內部類

    2.1 使用匿名類與Lambda表達式改寫題集面向對象2-進階-多態接口內部類的題目7-2。請貼圖關鍵代碼與運行結果,請在運行結果中出現你的學號與姓名。

    Arrays.sort(personList,(o1,o2)->o1.getName().compareTo(o2.getName()));
![](http://images2017.cnblogs.com/blog/1123275/201710/1123275-20171029105652023-2006558494.png)

###2.2. 分析下列代碼,回答shapeComparator所指向的對象與Comparator接口有什麼關係?
Comparator<Shape> shapeComparator = new Comparator<Shape>() { @Override public int compare(Shape o1, Shape o2) { //你的代碼 } };
-         實現了comparator的接口,重寫了其方法
###2.3 題集:6-1(匿名內部類)實驗總結。你以爲使用匿名內部類有什麼好處?
-         更加簡單明瞭
##3. PTA實驗總結
###3.1 PTA(自定義接口)。並回答:相比較不寫接口,直接寫一個類包含IntegerStack相應的方法來講,定義IntegerStack接口,而後定義其實現類這種方式有什麼好處?
-         方便不一樣環境下使用,根據需求修改簡單
###3.2 PTA(靜態內部類)。並回答:你以爲何時應該使用靜態內部類?靜態內部類與內部類有什麼區別?
-         當須要訪問別的靜態成員。靜態內部類能夠無外部類成員建立
###3.3 PTA(繼承覆蓋綜合練習-Person、Student、Employee、Company)。並回答:使用Collections.sort對引用類型數組進行排序須要有一個什麼前提條件?
-         實現接口comparable
##4.大做業-繼續完善(嘗試使用接口改造大家的系統)
###參考Case-StudentDao.zip案例
###假設在不一樣的實現中,購物車裏的商品有的是存放在ArrayList,有的是存放在數組中。
###4.1 如今但願將系統中購物車的操做抽象到相應的DAO接口。

public interface CarDao{
public double getTotal();
public boolean removeGoods(Goods goods);
public boolean addGoods(Goods goods,int num);
}```java

4.2 爲該接口定義至少兩個實現(如數組、列表、文件)。截圖本身負責部分的關鍵代碼,要求出現名字與學號。

package AboutShopping;
import java.util.*; 
/** 201621123090 鍾其均* */ 
public class ShoppingCartList implements ShoppingCartDao { private List<GoodsItem> goodsList = new ArrayList<GoodsItem>();
@Override
public int addGoods(Integer goodsId) { boolean b = Storage.storageGoodsList.containsKey(goodsId);
 if (b) 
 { int flag = 0;
    Goods goods=null;
    GoodsItem cartGoodsItem = null;
    GoodsItem storageGoodsItem = Storage.storageGoodsList.get(goodsId); 
    for (int i = 0; i < goodsList.size(); i++) {
        cartGoodsItem = goodsList.get(i); 
    }
    goods = cartGoodsItem.getGood(); 
if (goods.getGoodId().equals(goodsId)) { 
    flag = 1;
}
}
 
} 
if (flag == 0) { 
    goodsList.add(new GoodsItem(storageGoodsItem.getGood(), 1));
}
 return 1; 
} 
else { 
if (cartGoodsItem.getCount() < storageGoodsItem.getCount()) {
    cartGoodsItem.setCount(cartGoodsItem.getCount() + 1);
             return 1;
}// 成功添加。 } 

else return 0;// 庫存不足 } } 

else return -1;// 倉庫沒有該商品 }

4.3 給出大家的Main程序,說明定義DAO接口的好處。

public class Main{
  public static void main(String[] args) {
        Goods[] goods = new Goods[2];
        goods[0]=new Goods("機械鍵盤",598,1);
        goods[1]=new Goods("java課本",89,1);
        GoodsDao sdm = new GoodsDaoArrayImpl(50);//使用數組實現
//GoodsDao sdm = new GoodsDaoListImpl();//使用列表實現
        System.out.println("===========計算總價格========");
        for(Goods e:goods){
            if(sdm.getTotal(e)){
             System.out.println("%f",total);
            }
        }
        System.out.println("===========添加商品========");
        for(Goods e:goods){
            if(!sdm.addGoods(e)){
             System.out.println("添加商品失敗!");
            }else{
             System.out.println("添加商品成功!");
            }
            System.out.println("===========刪除商品========");
            for(Goods e:goods){
                if(!sdm.removeGoods(e)){
                 System.out.println("刪除商品失敗!");
                }else{
                 System.out.println("刪除商品成功!");
                }
        }

DAO(Data Access Object)接口是一個數據訪問接口,當咱們實現了這個接口,咱們能夠經過這個接口來編寫不一樣的類,使用不一樣的方法來實現數據的存儲。數組

5. 代碼閱讀:PersonTest.java(abstract、多態、super)

5.1 畫出類的繼承關係

5.2 main函數的代碼實現什麼功能?

  • 將四個對象進行排序

    5.3 若是將子類中的super構造函數去掉行不行?

  • 不行這樣沒法調用父類的構造方法

    5.4 PersonTest.java中哪裏體現了多態?

  • 多個類用toString方法進行了覆蓋操做

    3.碼雲及PTA

    題集:jmu-Java-04-面向對象2-進階-多態接口內部類

    3.1. 碼雲代碼提交記錄

    在碼雲的項目中,依次選擇「統計-Commits歷史-設置時間段」, 而後搜索並截圖

3.2 截圖PTA題集完成狀況圖

須要有兩張圖(1. 排名圖。2.PTA提交列表圖)

3.3 統計本週完成的代碼量

須要將每週的代碼統計狀況融合到一張表中。

周次 總行數 新增行數 總文件數 新增文件數
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
6 356 356 4 2
相關文章
相關標籤/搜索