Java-继承-练习

定义一个整形数组操作类,数组大小由外部决定,可向其中增加数据,可获取数组中所有数据,可扩增容量。派生两个子类:1. 排序类:将数组结果进行排序;2.反转类:将数组内容反转。

package com.joeaaa.demo07;

/*
* 定义数组操作类
*/
class Array{
    private int [] data;
    private int foot = 0; //控制角标

    public Array(int len){ // 由外部传递大小
        if(len>0){
            this.data = new int[len];
        }else {
            this.data= new int[1]; // 维持一个大小
        }
    }
    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 void increment(int num){
        int[] newArray = new int [this.data.length + num];
        System.arraycopy(this.data,newArray,0,0,this.data.length);
        this.data = newArray;  // 改变引用
    }
}

/*
* 派生类,进行数组排序
*/
class SortArray extends Array{
    public SortArray(int len){
        super(len); // 调用父类有参构造
    }
    public int[] getData(){ // 覆写
        java.util.Arrays.sort(super.getData());
        return super.getData();
    }
}

/*
* 数组反转
*/
class ReverseArray extends Array{
    public ReverseArray(int len){
        super(len);
    }
    public int [] getData(){ // 覆写
        int head = 0;
        int tail = super.getData().length-1;
        int center = super.getData().length /2;
        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 extendsTest2 {
    public static void main(String[] args) {
        Array array = new Array(3);
        /*
         * SortArray 测试
         */
        // SortArray array = new SortArray(5);

        /*
         * ReverseArray 测试
         */
        // ReverseArray array = new ReverseArray(5);
        System.out.println(array.add(1));
        System.out.println(array.add(2));
        System.out.println(array.add(3));
        System.out.println(array.add(0));
        array.increment(2);
        System.out.println(array.add(8));
        System.out.println(array.add(9));

        int[] result = array.getData();
        for (int i : result) {
            System.out.println(i);
        }
    }
}