王彪20162321 2016-2017-2 《程序設計與數據結構》第7周學習總結

學號20162321 2016-2017-2 《程序設計與數據結構》第七週學習總結

教材學習內容總結

  • 關鍵概念
    1. 多態引用在不一樣的時候能夠指向不一樣類型的對象
    2. 多態引用在運行時纔將方法調用與它的定義綁定在一塊兒
    3. 引用變量能夠指向聲明繼承於它的任意類的任何對象
    4. 對象的類型,而不是引用的類型,決定調用的是方法的哪一個版本
    5. 接口是一組抽象方法,因此不能被實例化
    6. 繼承可適用於接口,因此一個接口可派生於另外一個接口
    7. 接口引用能夠指向實現這個接口的任意類的任何對象
    8. 方法的參數能夠是多態的,這樣使方法具有了對其參數進行控制的靈活性
    9. 在偵聽器和所偵聽組件之間創建關係是經過多態完成的
  • 重點總結
    1. 當一個類給出了接口中定義的每一個抽象方法的實現是,就稱類實現了接口
    2. 若是接口中的某個方法沒在類中實現,則編譯錯誤
    3. 接口只保證類實現了某些方法,但它不限制類能夠有其餘的行爲
    4. 多個類能夠實現同一個接口,並在類中提供它們各自對方法的定義
    5. 接口中還能夠包含常量,這些常量用final修飾符來定義
    6. 子接口繼承父接口中的全部抽象方法和常量。實現子接口的任何一個類必須實現全部的方法
    7. 接口中全部成員都是公有的

教材學習中的問題和解決過程

  • 問題1:如何理解書中html

    對象的類型,而不是引用的類型,決定調用的是方法的那個版本java

  • 解決思路:當一個父類對象的引用變量,它引用子類對象時,決定調用誰的成員方法的條件是:被引用對象的類型而不是引用變量的類型。可是這個被調用的方法必須是在父類中定義過,也就是子類覆蓋過的方法。git

  • 問題2:關於動態綁定
    1.關於綁定數組

    綁定指的是一個方法的調用與方法所在的類(方法主體)關聯起來。對java來講,綁定分爲靜態綁定和動態綁定;或者叫作前期綁定和後期綁定.網絡

    2.靜態(前期)和動態(後期)綁定數據結構

    靜態:在程序執行前方法已經被綁定,java當中的方法只有final,static,private和構造方法是前期綁定。(我的認爲將方法聲明爲final既是爲了方法被覆蓋也是爲了關閉動態綁定,static,private因爲不能被繼承因此在編譯時就能夠肯定值)
    動態:在運行時根據具體對象的類型進行綁定。單元測試

    3.動態綁定的細節(來自網絡)學習

    1. 編譯器檢查對象的聲明類型和方法名。假設咱們調用x.f(args)方法,而且x已經被聲明爲C類的對象,那麼編譯器會列舉出C類中全部的名稱爲f的方法和從C類的超類繼承過來的f方法
    2. 接下來編譯器檢查方法調用中提供的參數類型。若是在全部名稱爲f 的方法中有一個參數類型和調用提供的參數類型最爲匹配,那麼就調用這個方法,這個過程叫作「重載解析」
    3. 當程序運行而且使用動態綁定調用方法時,虛擬機必須調用同x所指向的對象的實際類型相匹配的方法版本。假設實際類型爲D(C的子類),若是D類定義了f(String)那麼該方法被調用,不然就在D的超類中搜尋方法f(String),依次類推

    4.個人例子測試

    public class Testme {
      public static void main(String[] args){
          Father people = new Son();
          people.high();
      }}
      class Father{
      public void high(){
          System.out.println("170");}}
      class Son extends Father{
          public void high(){
              System.out.println("120");}}

    聲明瞭Father類型變量people但它指向是一個Son的對象,其調用Son的方法,由於在運行時發生了動態綁定,在綁定過程當中須要肯定調用哪一個版本的high方法實現。.net

  • 問題3:關於接口的繼承問題
  • 描述:書中介紹繼承的概念出適用於類外,還適用於接口,那麼接口繼承是否和類繼承通常不支持多繼承。

    (來自網絡)java接口能夠多繼承。Interface Extends Interface0, Interface1, interface3
    不容許類多重繼承的主要緣由是,若是A同時繼承B和C,而B和C同時有一個D方法,A如何決定該繼承那一個呢?
    但接口不存在這樣的問題,接口全都是抽象方法繼承誰都無所謂,因此接口能夠繼承多個接口。

代碼調試中的問題和解決過程

  • 問題1:static關鍵字
  • 描述:在作實驗時有以下代碼
public class Mydoc {
    Document d;
    public static void main(String[] args) {
        d = new Document(new IntFactory());
        d.DisplayData();
        d = new Document(new FloatFactory());
        d.DisplayData();
    }
}

此時程序提示Non-static filed 'd' cannot be referenced from a static context

  • 解決過程:由於靜態方法不會對具體的對象進行操做,因此它們不能引用只在類的實例中才存在的實例變量。全部的靜態方法,包括main方法,都只能訪問靜態變量或局部變量。
    因此static Document d

代碼託管

  • 代碼截圖

上週考試錯題總結

  • 1.若是有如下的程序代碼:
Int x=100;
    Int y=100;
    Integer wx=x;
    Integer wy=y;
    System.out.println(x==y);
    System.out.println(wx==wy);
在JDK5以上的環境編譯與執行,則顯示的結果是[true,true]
  • 1.分析:不瞭解Integer類

    Integer 類在對象中包裝了一個基本類型 int 的值。Integer 類型的對象包含一個 int 類型的字段。
    此外,該類提供了多個方法,能在 int 類型和 String 類型之間互相轉換,還提供了處理 int 類型時很是有用的其餘一些常量和方法。

  • 2.若是有如下的程序代碼:
int[] arr1 = {1, 2, 3};
     int[] arr2 = new int[arr1.length];
     arr2 = arr1;
     for(int value : arr2) {
     System.out.printf("%d", value);
     }
如下描述何者正確? [執行時顯示:123]
  • 分析;fot-each語句,等價於下列語句
int value
    while(arr2.hasNext()){
    myBook = bookList.next();
    System.out.println(value);}

結對及互評

其餘(感悟、思考等,可選)

  • 轉瞬間書本已通過半了,知識還很散,須要一次總結。
  • 這周的實驗介紹了Junit進行單元測試,但對於編寫好的測試代碼還有很大很大的不足。
  • 課外的知識汲取頗有必要,沒事能夠多看看別人的博客,交流經驗
  • 多看課外書,這周的讀書讓我感覺不少,收穫不少

第二次試驗Java面向對象程序設計

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第五週 200/1500 2/6 20/20
第六週 200/1700 1/7 18/38
第七週 500/2100 2/9 20/58
第八週 000/0000 0/0 00/00

嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

  • 計劃學習時間:XX小時

  • 實際學習時間:XX小時

  • 改進狀況:

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索