案例分析四
建立一个可以实现整型数组的操作类(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 increment(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.increment(3) ;
System.out.println(arr.add(1)) ;
System.out.println(arr.add(7)) ;
System.out.println(arr.add(0)) ;
}
}
第二步:进行排序子类定义
class SortArray extends Array { // 定义排序子类
public SortArray(int len) {
super(len) ;
}
public int [] getData() { // 获得排序结果
java.util.Arrays.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.increment(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 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()[head] = super.getData()[tail] ;
super.getData()[tail] = temp ;
head ++ ;
tail -- ;
}
return super.getData();
}
}
public class JavaDemo {
public static void main(String args[]) {
ReverseArray arr = new ReverseArray(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.increment(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.print(temp + "、 ") ;
}
}
}
父类之中定义的方法名称往往都很重要,如果功能相同的时候子类应该以覆写父类的方法为优先考虑。