一、实验预热
1、什么情况下使用继承?
当两个类具有相同的属性和方法时,可以使用继承来减少代码量。
2、什么叫做覆写?
子类重写父类的方法,覆写的方法的返回值、传递的参数数量和类型必须和父类的方法一样。
3、继承有哪些限制?
父类的私有属性无法直接继承,子类只能继承一个父类,但是可以多层继承。
4、描述重载和覆写的区别。
重载是指本类重写自己的方法,方法名相同,返回值、参数类型或数量不相同。
覆写是指子类重写父类的方法,方法名、返回值、参数类型和数量必须都相同。
5、描述super.方法和this. 方法的区别。
super.方法指的是父类的方法,会直接去父类中寻找方法。
this.方法指的是先在子类中寻找方法,找不到就去父类中寻找方法。
二、实验内容
1、定义一个数组操作类(ArrayCustomer类),在这个类里面可以进行整型数组的操作,由外部传入数组的长度,可以进行数据的保存(add())及数据的输出(getData())。
代码:
package leif.tests;
import java.util.Scanner;
public class ExperimentalReport {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayCustomer arrayCustomer = new ArrayCustomer(scanner.nextInt());
for (int i = 0; i < arrayCustomer.getIs().length; i++) {
arrayCustomer.add(i);
}
arrayCustomer.getData();
scanner.close();
}
}
class ArrayCustomer {
private int[] is;
private int index = 0;
public ArrayCustomer(int length) {
is = new int[length];
}
public int[] getIs() {
return is;
}
public void add(int i) {
if (index < getIs().length) {
is[index] = i;
index++;
}
}
public void getData() {
for (int i : is) {
System.out.println(i);
}
}
}
结果截图:
2、在第一题的基础上,从ArrayCustomer类上派生出两个子类,要求保证客户端操作方法一致(即我们的测试类里面的main方法的代码,除了类名被子类代替,其他代码保持不变)。
1)排序类:通过此类取得的数据要求覆写getData(),可以进行排序。
2)反转类:通过此类取得的数据要求覆写getData(),采用倒序的方式输出。
代码:
package leif.tests;
import java.util.Arrays;
import java.util.Scanner;
public class ExperimentalReport {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayCustomer arrayCustomer = new ArrayCustomer1(scanner.nextInt());
for (int i = 0; i < arrayCustomer.getIs().length; i++) {
arrayCustomer.add(i);
}
arrayCustomer.getData();
scanner.close();
}
}
class ArrayCustomer {
private int[] is;
private int index = 0;
public ArrayCustomer(int length) {
is = new int[length];
}
public int[] getIs() {
return is;
}
public void add(int i) {
if (index < getIs().length) {
is[index] = i;
index++;
}
}
public void getData() {
for (int i : is) {
System.out.println(i);
}
}
}
class ArrayCustomer1 extends ArrayCustomer {
public ArrayCustomer1(int length) {
super(length);
}
@Override
public void getData() {
int[] is = super.getIs();
Arrays.sort(is);
for (int i : is) {
System.out.println(i);
}
}
}
class ArrayCustomer2 extends ArrayCustomer {
public ArrayCustomer2(int length) {
super(length);
}
@Override
public void getData() {
int[] is = super.getIs();
for (int i = is.length - 1; i >= 0; i--) {
System.out.println(is[i]);
}
}
}
结果截图: