【本節目标】
通過閱讀本節内容,你将進一步熟悉數組的概念與其相關操作,并對繼承有更加深入的了解,甚至熟練掌握這一概念。
案例分析四(數組操作)
建立一個可以實作整型數組的操作類(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面向對象程式設計文章檢視此處