1. 程式人生 > >201711671203《Java程式設計》第六週學習報告

201711671203《Java程式設計》第六週學習報告

教材內容總結

首先是子類與繼承

Java的繼承類似於C++,但又有所不同。在Java中,需要使用關鍵字extends來定義一個類的子類

class 子類名 extends 父類名{
...
}

其次Java的類按繼承關係形成樹形結構,其根節點是Object類(Object是Java.lang包中的類)所有的類都是Object的子類,若宣告類的時候沒有使用extends,則這個類被系統預設是Object的子類。              與c++不同,c++使用public、protect、private作為區分繼承的型別,Java中若子類與父類在同一個包中,那麼子類自然地繼承其父類中不是private的成員變數和方法作為自己的成員變數,若不在同一個包中,則子類只繼承protected和public的成員變數和方法。

與c++相同,用子類的構造方法建立物件時,不僅子類中宣告的成員變數被分配了記憶體空間,父類的成員變數也分配了記憶體空間,但只將子類繼承的那部分成員變數作為分配給子類物件的變數。但我們可以通過繼承父類中可以操作那部分未繼承的變數的方法來操作這部分未繼承的變數。

在編寫子類時,如果我們宣告的成員變數的名字與父類繼承來的成員變數的名字相同(宣告的型別可以不同),這種時候繼承過來的成員變數會被隱藏,但我們仍可以通過呼叫父類繼承的方法操作被子類隱藏的成員變數。       其次,子類也可以通過重寫可以隱藏已繼承的方法(被稱為方法覆蓋)。它的語法規則是,在子類中定義一個方法,該方法的型別與父類的方法的型別一致或者是父類方法的型別的子型別(即若父類的方法型別時類,那麼允許子類的重寫方法時子類),且方法的名字,引數個數,引數型別都和父類方法完全相同。(若型別不同,那麼該方法就不是重寫,此時在子類有兩個同名的方法,這是不允許的,此時編譯錯誤)

子類一單隱藏了繼承的成員變數,那麼子類建立的物件不再擁有該變數,該變數將歸關鍵字super所擁有,同樣的,被隱藏的方法也是一樣。

我們都知道,用子類的構造方法建立一個子類的物件,子類的構造方法總是先呼叫父類的某個構造方法,若子類沒有指明使用父類的那個構造方法,,則預設呼叫無參構造方法。又因為子類不繼承父類的構造方法,因此子類再起構造方法中須使用super來呼叫構造方法,且super必須是子類構造方法的頭一條語句,若沒有明顯寫出super,那麼預設有

super();

我們又知道,當類中自定義了一個或多個建構函式後,Java將不提供預設的構造方法,因此當在父類中定義多個構造方法時,應當包括一個不帶引數的構造方法,以防子類省略super時出現錯誤。例子:

class student{
...

student();

student(int number,String name)
}

class a extends student{
    a(int number,String name){

    super(number,name);
...
}
}

 再者有關鍵字final,若用final將類宣告為final類,則final類不能被繼承,用final修飾方法,則該方法不允許子類重寫,用final修飾成員變數或區域性變數,那麼它就是常量,常量在執行期間不允許變化,同時常量沒有預設值,需要程式在宣告常量時指定該常量的值。

然後是上轉型物件,假設animal類是tiger類的父類。

Animal a;
tiger b =new Tiger();
a = b

這時稱a是b的上轉型物件(好比如“老虎是動物”)

上轉型物件不能操作子類新增的成員變數和方法嗎,但他可以訪問子類繼承或隱藏的成員變數和方法。

當一個類有很多子類時,並且這些子類都重寫父類中的某個方法,當把子類建立的物件的引用方法一個父類的物件時,就得到該物件的上轉型物件,那麼這個上轉型物件在呼叫這個方法是就可能具有多種形態。多型性就是指父類的某個方法在被其子類重寫時,可以各自產生自己的功能行為

class  動物 {
   void cry() {
   }  
}
class 狗 extends 動物 {
   void cry() {
      System.out.println("汪汪....."); 
   }  
}
class 貓 extends 動物  {
   void cry() {
      System.out.println("喵喵....."); 
   }  
}
public class Example5_11 { 
   public static void main(String args[]) {
      動物 animal;
      animal = new 狗();
      animal.cry(); 
      animal=new 貓();
      animal.cry();
  }
}

教材學習過程中遇到的問題

關於抽象類的使用不太理解

程式碼除錯遇到的問題

  程式碼行數 部落格量 學習時間  
目標        
第一週 53 1 3  
第二週 186 1 5 調整思維
第三週 134 1 4  

第五週

233 1 6 投入學習
第六週 425/1011 1/5 9/27