继承案例分析四

建立一个可以实现整数数组的操作类(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();	
	}
}

父类之中定义的方法名称往往都很重要,如果功能相同的时候类应该以覆写父类的方法为优先考虑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值