建立一个可以实现整数数组的操作类(Array),而后在里面可以操作的数组的大小由外部决定,而后在Array类里面需要提供有数组的如下处理:
进行数据的增加(如果数据满了则无法增加)、可以实现数组的容量扩充、取得数组全部内容。
完成之后在此基础上再派生出两个子类:
- 数组排序类:返回的数据必须是排序后的结果;
- 数组反转类:可以实现内容的首位交换。
对于本程序而言首先要考虑的一定是父类如何定义完善。
class JavaDemo
{
public static void main(String[] args)
{
//排序
System.out.println("---排序---");
SortArray arrayA= new SortArray(5);
arrayA.addArray(4);
arrayA.addArray(6);
arrayA.addArray(1);
arrayA.addArray(3);
arrayA.addArray(7);
arrayA.increment(3);
arrayA.addArray(13);
arrayA.addArray(88);
arrayA.addArray(2);
for(int x : arrayA.getArray()){
System.out.print(x+"\t");
}
//反转
System.out.println("\n---反转---");
ReverseArray arrayB= new ReverseArray(5);
arrayB.addArray(4);
arrayB.addArray(6);
arrayB.addArray(1);
arrayB.addArray(3);
arrayB.addArray(7);
arrayB.increment(3);
arrayB.addArray(13);
arrayB.addArray(88);
arrayB.addArray(2);
for(int x : arrayB.getArray()){
System.out.print(x+"\t");
}
}
}
class Array //数组的操作类
{
private int[] array;
private int foot;//进行数组索引控制
//构造方法
public Array(int length){
if(length > 0){
this.array = new int[length]; //开辟数组
}else{
this.array = new int[1]; //开辟一个空间
}
}
//数据增加
public boolean addArray(int num){
if(this.foot < this.array.length){ //有位置
this.array[this.foot++] = num;
return true;
}
return false;
}
//实现数组的容量扩充,给出的是扩充的大小,实际大小:已有大小+扩充大小
public void increment(int num){
int[] newArray = new int[this.array.length + num];
System.arraycopy(this.array,0,newArray,0,this.array.length);
this.array = newArray;//改变数组引用
}
//获取数据方法
public int[] getArray(){
return this.array;
}
}
class SortArray extends Array
{
public SortArray(int length){
super(length);
}
public int[] getArray(){
java.util.Arrays.sort(super.getArray()); //对父类结果进行排序
return super.getArray();
}
}
class ReverseArray extends Array
{
public ReverseArray(int length){
super(length);
}
public int[] getArray(){
int center = super.getArray().length/2;
int head = 0; //定义头标
int tail = super.getArray().length-1; //定义脚标
for(int x = 0; x <center ;x++){ //利用for循环进行位置交换
int temp = super.getArray()[head];
super.getArray()[head] = super.getArray()[tail];
super.getArray()[tail] = temp;
head++;
tail--;
}
return super.getArray();
}
}
父类之中定义的方法名称往往都很重要,如果功能相同的时候类应该以覆写父类的方法为优先考虑。