要求定义一个数组操作类(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 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 TestDemo { public static void main(String args[]) { Array arr = new Array(3); System.out.println(arr.add(10)); System.out.println(arr.add(20)); System.out.println(arr.add(30)); System.out.println(arr.add(100)); System.out.println(arr.add(200)); int temp[] = arr.getData(); for (int x = 0; x < temp.length; x++) { System.out.println(temp[x]); } } }
在以上的代码之中发现,此时Array类没有提供无参构造,因为必须要传入一个数组的大小,否则该程序无法使用,并且Array类就规定了要想增加数据使用add()方法,要想取出全部数据,使用getData()方法。
二、开发排序子类
如果要真是排序只是在取得数据的时候将数据以排序的形式返回即可,其它的操作和Array类应该没有区别,甚至我们认为连客户端使用的方法都应该是相同的。
范例:开发排序类
// 定义一个排序数组子类 class SortArray extends Array { // Array类里面现在没有无参构造的方法 public SortArray(int len) { // 这样父类中的data数组就可以初始化 super(len);// 明确的调用父类的有参构造 } // 因为父类中的getData()方法不够当前类使用,但是又 需要保留这个方法名称 // 使用覆写的概念来将此方法的功能扩充 public int[] getData() { Arrays.sort(super.getData()); return super.getData(); } } public class TestDemo { public static void main(String args[]) { SortArray arr = new SortArray(3); System.out.println(arr.add(1)); System.out.println(arr.add(20)); System.out.println(arr.add(5)); System.out.println(arr.add(100)); System.out.println(arr.add(200)); int temp[] = arr.getData(); for (int x = 0; x < temp.length; x++) { System.out.println(temp[x]); } } }
在这个程序里面,我们的思路:
- 绝对不改变客户端已有的使用方法;
- 子类现在为了要维持方法的功能继续完善,所以要根据情况进行父类方法的覆写。
三、开发反转类
反转类的最终要求也是要保证客户端的操作习惯不改变,也就是说父类的方法名称应该继续保留。
范例:开发反转类
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 TestDemo { public static void main(String args[]) { ReverseArray arr = new ReverseArray(3); System.out.println(arr.add(1)); System.out.println(arr.add(20)); System.out.println(arr.add(5)); System.out.println(arr.add(100)); System.out.println(arr.add(200)); int temp[] = arr.getData(); for (int x = 0; x < temp.length; x++) { System.out.println(temp[x]); } } }
依然保持方法功能不改变。
通过以上的代码可以发现:
- 子类的功能就是根据特殊的情况进行父类功能的扩充;
- 子类扩充方法的时候尽量以父类定义的方法名称为主,可以根据实际情况进行方法的覆写。