范例:继承的应用:数组排序,反转

定义一个数组类,要求包含构造方法,增加数据,输出数据的成员方法,并利用数组实现动态内存的分配,

在此基础上定义以下子类:

1)排序类,实现排序。

2)反转类,实现数据反向存放。

分析

本程序要求数组实现动态的内存分配,也就是说里面数组大小是由程序外部决定的。即根据对象实例化: 类 对象=new 类(参数,参数,,);

所以应该在构造方法中,为类的数组进行初始化操作(数组大小通过构造方法里的参数代入初始化。)。

之后每次增加数据的时候都应该判断数组的内容是否已经满了。如果满了不能增加。

另外如果要增加数据的时候肯定需要一个指向可以插入的下标,用于记录插入的位置。

class Array{        // 表示数组
    private int temp[] ;        // 整型数组
    private int foot ;    // 定义添加位置
    public Array(int len){
        if(len>0){
            this.temp = new int[len] ;
        }else{
            this.temp = new int[1] ;    // 最少维持空间是1个
        }
    }
    public boolean add(int i){    // 增加元素
        if(this.foot<this.temp.length){    // 还有空间
            this.temp[foot] = i ;    // 增加元素
            this.foot ++ ;// 修改脚标
            return true ;
        }else{
            return false ;
        }
    }
    public int[] getArray(){
        return this.temp ;
    }
};
class SortArray extends Array{    // 排序类
    public SortArray(int len){
        super(len) ;
    }
    public int[] getArray(){    // 覆写方法
        java.util.Arrays.sort(super.getArray()) ;    // 排序操作
        return super.getArray() ;
    }
};
class ReverseArray extends Array{    // 反转操作类
    public ReverseArray(int len){
        super(len) ;
    }
    public int[] getArray() {
        int t[] = new int[super.getArray().length] ;    // 开辟一个新的数组
        int count = t.length - 1 ;
        for(int x=0 ;x<t.length;x++){
            t[count] = super.getArray()[x] ;    // 数组反转
            count-- ;
        }
        return t ;
    }
};
public class ArrayDemo{
    public static void main(String args[]){
        // ReverseArray a = null ;    // 声明反转类对象
        // a = new ReverseArray(5) ;    // 开辟5个空间大小
        SortArray a = null ;
        a = new SortArray(5) ;
        System.out.print(a.add(23) + "\t") ;
        System.out.print(a.add(21) + "\t") ;
        System.out.print(a.add(2) + "\t") ;
        System.out.print(a.add(42) + "\t") ;
        System.out.print(a.add(5) + "\t") ;
        System.out.print(a.add(6) + "\t") ;
        print(a.getArray()) ;

    }
    public static void print(int i[]){    // 输出数组内容
        for(int x=0;x<i.length;x++){
            System.out.print(i[x] + "、") ;
        }
    }
};

充分利用了继承,继承了父类的方法,利用了覆盖,利用了super关键字调用父类方法属性。

posted @ 2016-05-24 23:30  美好的明天  阅读(402)  评论(0编辑  收藏  举报