天天看點

教你從實戰中領悟繼承(下) | 帶你學《Java面向對象程式設計》之四十四

上一篇:教你從實戰中領悟繼承(中) | 帶你學《Java面向對象程式設計》之四十三

【本節目标】

通過閱讀本節内容,你将進一步熟悉數組的概念與其相關操作,并對繼承有更加深入的了解,甚至熟練掌握這一概念。

案例分析四(數組操作)

建立一個可以實作整型數組的操作類(Array),而後在裡面可以操作的數組的大小由外部來決定,而後在Array類裡面需要提供有數組的如下處理: 進行資料的增加(如果資料滿了則無法增加)、可以實作數組的容量擴充、取得數組全部内容。

完成之後在此基礎上再派生出兩個子類:

  • 數組排序類:傳回的資料必須是排序後的結果;
  • 數組反轉類: 可以實作内容的首尾交換。

對于本程式而言,首先要考慮的是父類如何定義完善。

第一步:實作基本的數組操作類定義

class Array {        //數組的操作類
    private int [] data ;      //整型數組
    private int foot ;      //進行數組索引控制
    public Array(int len) {
        if (len > 0) {
          this.data = new int [len] ;    //開辟數組
        } else {
            this.data = new int [1] ;     //開辟一個空間
        }
    }
//實作數組的容量擴充,給出的是擴充大小,實際大小:已有大小+擴充大小
    public void increament (int num) {
        int newData [] = new int [this.data.length + num] ;
        System.arraycopy(this.data , 0 , newData , 0 ,this.data.length) ;
        this.data = newData ;    //改變數組引用
    }
    public boolean add(int num) {    //資料增加
        if (this.foot < this.data.length) {    //有位置
          this.data[this.foot ++] = num ;
          return true ;
        }
        return false ;
    }
    public int[] getData () {
        return this.data ;
    }
}
public class JavaDemo{
    public static void main(String args[]) {
        Array arr = new Array(5) ;
        System.out.println(arr.add(10)) ;
        System.out.println(arr.add(5)) ;   
        System.out.println(arr.add(20)) ;
        System.out.println(arr.add(3)) ;
        System.out.println(arr.add(6)) ;
        arr.increament(3) ;
        System.out.println(arr.add(1)) ;
        System.out.println(arr.add(7)) ;
        System.out.println(arr.add(0)) ;
    }         
}           

第二步:進行排序子類定義

class Array {        //數組的操作類
    private int [] data ;      //整型數組
    private int foot ;      //進行數組索引控制
    public Array(int len) {
         if (len > 0) {
              this.data = new int [len] ;    //開辟數組
         } else {
              this.data = new int [1] ;     //開辟一個空間
         }
     }
//實作數組的容量擴充,給出的是擴充大小,實際大小:已有大小+擴充大小
     public void increament (int num) {
         int newData [] = new int [this.data.length + num] ;
         System.arraycopy(this.data , 0 , newData , 0 ,this.data.length) ;
         this.data = newData ;    //改變數組引用
     }
     public boolean add(int num) {    //資料增加
        if (this.foot < this.data.length) {    //有位置
           this.data[this.foot ++] = num ;
           return true ;
        }
        return false ;
     }
     public int[] getData () {
         return this.data ;
     }
}
class SortArray extends Array {      //定義排序子類
    public SortArray(int len) {
        super(len) ;
    }
    public int [] getData() {           //獲得排序結果 
        java.util.Array.sort(super.getData()) ;      //排序
        return super.getData() ;
    }
}
public class JavaDemo{
    public static void main(String args[]) {
        SortArray arr = new SortArray (5) ;
        System.out.println(arr.add(10)) ;
        System.out.println(arr.add(5)) ;   
        System.out.println(arr.add(20)) ;
        System.out.println(arr.add(3)) ;
        System.out.println(arr.add(6)) ;
        arr.increament(3) ;
        System.out.println(arr.add(1)) ;
        System.out.println(arr.add(7)) ;
        System.out.println(arr.add(0)) ;
        int result [] = arr.getData() ; 
        for (int temp : result) {
            System.out.println(temp + “、”) ;
        }
    }         
}           

第三步:定義反轉子類

class Array {        //數組的操作類
    private int [] data ;      //整型數組
    private int foot ;      //進行數組索引控制
    public Array(int len) {
        if (len > 0) {
           this.data = new int [len] ;    //開辟數組
        } else {
           this.data = new int [1] ;     //開辟一個空間
        }
    }
//實作數組的容量擴充,給出的是擴充大小,實際大小:已有大小+擴充大小
    public void increament (int num) {
        int newData [] = new int [this.data.length + num] ;
        System.arraycopy(this.data , 0 , newData , 0 ,this.data.length) ;
        this.data = newData ;    //改變數組引用
    }
    public boolean add(int num) {    //資料增加
        if (this.foot < this.data.length) {    //有位置
           this.data[this.foot ++] = num ;
           return true ;
        }
        return false ;
    }
    public int[] getData () {
        return this.data ;
    }
}
class ReverseArray extends Array {      //定義反轉子類
    public ReverseArray (int len) {
        super(len) ;
    }
    public int [] getData() {           //獲得排序結果
       int center = super.getData().length / 2 ;
       int head = 0 ;
       int tail = super.getData().length -1 ;
       for (int x = 0 ; x < center ; x ++) {
          int temp = super.getData() [head] = super.getData() [tail];
          super.getData() [tail] = temp ;
          head ++ ;
          tail -- ; 
       }
       return super.getData() ;
    }
}
public class JavaDemo{
    public static void main(String args[]) {
        SortArray arr = new SortArray (5) ;
        System.out.println(arr.add(10)) ;
        System.out.println(arr.add(5)) ;   
        System.out.println(arr.add(20)) ;
        System.out.println(arr.add(3)) ;
        System.out.println(arr.add(6)) ;
        arr.increament(3) ;
        System.out.println(arr.add(1)) ;
        System.out.println(arr.add(7)) ;
        System.out.println(arr.add(0)) ;
        int result [] = arr.getData() ; 
        for (int temp : result) {
            System.out.println(temp + “、”) ;
        }
    }         
}           
教你從實戰中領悟繼承(下) | 帶你學《Java面向對象程式設計》之四十四

圖一 執行結果一

父類之中定義的方法名稱往往都很重要,如果功能相同的時候子類應該以覆寫父類的方法為優先考慮。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:三分鐘帶你認識注解 | 帶你學《Java面向對象程式設計》之四十五 更多Java面向對象程式設計文章檢視此處