1. 程式人生 > ># 20175316盛茂淞 2018-2019-2《Java程序設計》第4周學習總結

# 20175316盛茂淞 2018-2019-2《Java程序設計》第4周學習總結

錯誤 有一個 如果 mage 分享 is-a 概念 ads 入參

20175316盛茂淞 2018-2019-2《Java程序設計》第4周學習總結

教材學習內容總結

第五章 子類與繼承

一.繼承

  • 1.繼承定義:避免多個類間重復定義共同行為
  • 2.子類與父類:
    • 父類:
      • 對有著 共同特性 的多類事物,進行再 抽象 成一個類,這個類就是多類事物的父類
      • 父類的意義在於可以抽取多類事物的共性
    • 子類既可以是一個子類,也可以是一個父類;父類既可以是一個父類,也可以是一個子類
    • 在Java中只有 單一繼承 ,即 子類只能繼承一個父類
    • 子類與父類間會有 is-a 的關系( 子類 is a 父類
    public class RPG1
    {
    public static void main(String[] args)
      {
         demoSwordsMan1();
         demoMagician1();
      }
    
    static void demoSwordsMan1()
      {
         SwordsMan1 swordsMan1 = new SwordsMan1();
         swordsMan1.setName("Justin");
         swordsMan1.setLevel(1);
         swordsMan1.setBlood(200);
         System.out.printf("劍士:(%s,%d,%d)%n",swordsMan1.getName(),swordsMan1.getLevel(),swordsMan1.getBlood());
      }
    
    static void demoMagician1()
      {
         Magician1 magician1 = new Magician1();
         magician1.setName("Monica");
         magician1.setLevel(1);
         magician1.setBlood(100);
         System.out.printf("魔法師:(%s,%d,%d)%n",magician1.getName(),magician1.getLevel(),magician1.getBlood());
      }
    }
  • 3.多態與is-a
    • IS-A譯為“是一種”,子類與父類就是一種“IS-A”的關系。例如上述代碼,SwordsMan是一種Role(即SwordsMan is a Role)。
    • 註意建立對象時候的順序,應該遵守從右往左讀的原則(這樣才符合IS-A原則):
    SwordsMan swordsman=new SwordsMan;
    Role role=new SwordsMan();
    • 在java中有且僅有一種繼承父類
    • 賦值時:如果用父類建立了一個對象實例,那麽要將這個對象賦給它的子類時,需要進行強制轉eg:
    Role role1 = new SwordsMan();
    SowrdsMan swordsMan = (SwordsMan) role1;
  • 4.重新定義行為
    如果子類和父類的定義函數名相同會出現函數覆蓋的情況。
    多個類中功能相同但是功能主體不同,也可以抽取在父類中。

  • 5.抽象方法、抽象類
    上述在父類中的fight()函數沒有撰寫程序代碼,用abstract關鍵詞標識,public abstract class roleplay表示定義不完整的類,就不能建立實例。
    子類必須覆蓋父類中的所有抽象方法,才能建立子類調用。

  • 6.protected成員
    protected與public、private類似都是權限關鍵字。如果成員被定義為protected的話在相同的包中可以直接存取。

  • 7.super關鍵字
    修改子類中已經存在的內容時,可以在調用方法前加上super關鍵字。

    在使用super關鍵字調用父類方法,不能定義為private(只限定在類內中使用)

  • 註意
    (1)關鍵字extends是為了擴充和繼承父類的行為。
    (2)在java中一個子類只能繼承一個父類。
    (3)在判斷操作對象是“哪一種”的時候,檢查語法的邏輯是否正確,方式是從=右邊往左邊讀:右邊是不是一種左邊呢(右邊類是不是左邊類的子類)?
    (4)在重新定義中,子類必須撰寫與父類方法相同的簽署,如果因為疏忽打錯字就會完全不同(雖然編譯會成功,但是行為會完全不同),但在JDK5後
    (5)標註@Override,表示要求編譯程序檢查是否真的重新定義父類中某個方法。
    (6)子類如果繼承抽象類,對於抽象方法有兩種做法,一種是繼續標註該方法為abstract(必須在class前標註abstract),另一種就是操作抽象方法,如果都沒有實施,則會出現編譯錯誤。

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

  • 問題一:
    關於子類繼承抽象類有些不太清楚,課本上說繼續標識子類是一種抽象類或者說操作抽象方法。關於如何操作抽象方法小小的做了一個嘗試:
abstract class  role{
    abstract void speak();

}
class student extends role {
    void speak(){
        System.out.println("i am just a student");
    }
    
}

public class abvoid {

    public static void main(String[] args) {
        student stu1=new student();
        stu1.speak();
// TODO code application logic here
    }
    
}
  • 結果技術分享圖片

調試與運行截圖

  • 編譯技術分享圖片
  • 上傳碼雲技術分享圖片

上周考試錯題情況

  • 題目1
在Ubuntu中用自己的有位學號建一個文件,教材p87 Example4_15
1. 修改代碼中的stu的number為自己學號的後四位,package那一行改為你的姓名首字母縮寫,比如劉德華同學改為package ldh
2. 其他需要修改的自行修改,提交運行結果截圖
  • 出現問題:編譯不成功:找不到或無法加載主類項
  • 解決辦法:
    註意編譯命令為 javac sms(文件夾)/ Example4_15.java
    運行命令 java sms/ Example4_15
  • 運行截圖技術分享圖片
    技術分享圖片

  • 題目2
參考http://www.cnblogs.com/rocedu/p/6766748.html 編程實現輸入平方倒置的功能

命令行傳入數組,比如類名為ArraySquareReverse,   java ArraySquareReverse 1 2 3 4 輸出16 9 4 1 

提交運行結果的截圖(至少五張),註意測試正常,異常,邊界情況,輸入參數最後一個是你的學號後2位
  • 出現問題:類名必須和文件名一樣
  • 編譯運行結果
    (1)例子
    (2)參數最後一個是我的學號後2位 16
    (3)參數有一個是0
    (4)參數有負數
  • 運行結果
    (1)
    技術分享圖片
    (2)技術分享圖片
    (3)技術分享圖片
    (4)技術分享圖片

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 300/1300 2/9 30/90

本周學習感受

本周測試題目二較難,需要用到各種結構體和數組,難度較大,我是在上網查閱資料後才編寫出來,仍需多加練習。
這兩周的學習內容中有很多的概念,書上的例子也有很多需要我們去實踐,雖然說課本上的代碼也敲了,知識內容都理解了,但是感覺學的還是不踏實,對於java面向對象這一塊還是不能很好的應用。只能說學的多而不精,看上去每個概念都學了,但是應用方面有很大的欠缺。希望以後自己慢慢地實踐過程中再學習體會吧。
我慢慢的感覺學習Java已經變成了每天的一項日常,會不知不覺的在空閑的時候學習一會Java,慢慢的也體會到了Java的樂趣,我相信我會帶著這種樂趣一直堅持下去

# 20175316盛茂淞 2018-2019-2《Java程序設計》第4周學習總結