接口这类编程题很容易考,因为可以考察的点很多,接口下可以放多个方法,或可以声明多个接口,不同的类可以使用同一个接口(或者说一个接口供多个类使用),或一个类使用多个接口,在定义的类中对接口内方法进行重写,可以得到具体的行为方法…所以说这种编程题目容易考察到学生对代码的组织能力。第一次经历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