电子科大Java半期测试解答(接口部分)

117 阅读3分钟

接口这类编程题很容易考,因为可以考察的点很多,接口下可以放多个方法,或可以声明多个接口,不同的类可以使用同一个接口(或者说一个接口供多个类使用),或一个类使用多个接口,在定义的类中对接口内方法进行重写,可以得到具体的行为方法...所以说这种编程题目容易考察到学生对代码的组织能力。第一次经历Java手写代码的考试,再加上自己对接口和构造函数不熟悉,所以当时把框架写出来了,但是具体代码并没有很完整,考后对这两题的总结如下。

1、求长方形和圆形的面积及周长(单接口) 定义一个接口,它有两个方法,一个是计算图形的面积,另一个是计算图形周长:

double get_area();
double get_perimeter();

请实现长方形和圆的图形类,它们都实现这两个接口;再分别构造长为 10,宽为 5 的长方形,以及半径为 5 的圆,然后通过接口分别打印出这两个图形的面积和周长。

package model;
//定义一个接口,包含了求面积和求周长两个方法
interface Perarea {
	double get_area();

	double get_perimeter();
}
//长方形这个类声明使用了该接口
class Rectangle implements Perarea {
	private int length;
	private int width;
	//构造函数接受参数
	Rectangle(int length, int width) {
		this.length = length;
		this.width = width;
	}

	public double get_area() {
		return length * width;
	}

	public double get_perimeter() {
		return 2 * (length + width);
	}
}
//圆形这个类声明使用了该接口
class Circle implements Perarea {
	private int r;

	Circle(int r) {
		this.r = r;
	}

	public double get_area() {
		return 3.14 * r * r;
	}

	public double get_perimeter() {
		return 2 * 3.14 * r;
	}
}

public class AreaTest {
	public static void main(String[] args) {
		Perarea rectagle = new Rectangle(10, 5);
		Perarea circle = new Circle(5);
		System.out.println("rectagle area = " + rectagle.get_area() + " perimeter = " + rectagle.get_perimeter());
		System.out.println("circle area = " + circle.get_area() + " perimeter = " + circle.get_perimeter());
	}
}

rectagle area = 50.0 perimeter = 30.0
circle area = 78.5 perimeter = 31.400000000000002

2、求数组的最大最小值(双接口) 有如下 2 个接口:

interface Ia {
	int max(int[] a);
}
interface Ib {
	int min(int[] a);
}

其中 max 方法为返回数组中元素的最大值,min 方法为返回数组中元素的最小值。 要求,设计一个非抽象类 Test2,同时实现该两个接口,并在 Test2 类的 main 方法中用如下考试的分数数据{ 88, 89, 82, 90, 98 }初始化一个数组,并分别使用 max 和 min 方法求出最高分和最低分,并分别打印输出。

package model;

interface Ia {
	int max(int[] a);
}

interface Ib {
	int min(int[] a);
}

//该类使用了两种接口
public class MaxMin implements Ia, Ib {
	//重写max方法
	public int max(int[] a) {
		int t = a[0], i;
		for (i = 1; i < a.length; i++) {
			if (t < a[i])
				t = a[i];
		}
		return t;
	}
	//重写min方法
	public int min(int[] a) {
		int t = a[0], i;
		for (i = 1; i < a.length; i++) {
			if (t > a[i])
				t = a[i];
		}
		return t;
	}

	public static void main(String[] args) {
		MaxMin maxMin = new MaxMin();
		int[] arr = new int[] { 88, 89, 82, 90, 98 };
		// 同样可以写 int[] arr = { 88, 89, 82, 90, 98 };
		int min = maxMin.max(arr);
		int max = maxMin.min(arr);
		System.out.println("max = " + max + " min = " + min);
	}
}

如果将max和min方法放在同一个接口Ic中呢

interface Ic {
	int max(int[] a);
	int min(int[] b); 
}
public class MaxMin implements Ic {
	...
}
max = 82 min = 98

大二上的期末考试,事实证明,确实考察了接口的设计!