#接口#
package 接口;
/*
* 定义一个rec_Area_Peri接口,
* 里面有两个方法getArea()和getPerimeter(),
* 分别表示“计算面积”和“计算周长”;
* 再定义一个Rectangle类,实现接口rec_Area_Peri。
*/
public interface rec_Area_Peri {
abstract int getArea();
abstract int getPerimeter();
}
#rectangle类#
package 接口;
class rectangle implements rec_Area_Peri{
int width;
int length;
public rectangle(int w,int l){
width = w;
length = l;
}
public int getArea(){
return length * width;
}
public int getPerimeter(){
return 2 * (length + width);
}
}
#测试Test类#
package 接口;
public class Test_interface {
public static void main(String[] args) {
rectangle rect = new rectangle(30, 40);
System.out.println("矩形的面积: " + rect.getArea());
System.out.println("矩形的周长: " + rect.getPerimeter());
}
}
//1. 在实现类Rectangle中注释掉一个方法后进行编译,看发生了什么?为什么?
//error: The type rectangle must implement the inherited abstract method rec_Area_Peri.getArea()
//2. 在实现类Rectangle中将各实现方法前的public修饰符去掉再进行编译,看发生了什么?为什么?
//error: Cannot reduce the visibility of the inherited method from rec_Area_Peri
//原因:一个类实现一个接口时,必须使接口中的方法是 public 访问控制符
//3. 将接口rec_Area_Peri中定义的两个方法前加上abstract修饰符再编译,看对程序有影响否?为什么?
//没有影响,原因:interface 里的方法默认为隐式 public 和 abstract类型
//4. 将接口rec_Area_Peri中定义的两个方法拆分定义成两个接口,即每个接口只定义一个方法,程序将如何修改?
/*
public interface rec_Area_Peri1 {
abstract int getArea();
}
public interface rec_Area_Peri2 {
abstract int getPerimeter();
}
class rectangle implements rec_Area_Peri1,rec_Area_Peri2{
int width;
int length;
public rectangle(int w,int l){
width = w;
length = l;
}
public int getArea(){
return length * width;
}
public int getPerimeter(){
return 2 * (length + width);
}
}
*/
测试结果:
其他结果不做测试...........
把上述程序的接口改为抽象类,程序实现如下:
# abstract_rec_Area_Peri类 #
package 抽象类;
abstract class abstract_rec_Area_Peri {
abstract int getArea();
abstract int getPerimeter();
}
#rectangle1类#
class rectangle1 extends abstract_rec_Area_Peri {
int width;
int length;
public rectangle1(int w,int l){
width = w;
length = l;
}
public int getArea(){
return length * width;
}
public int getPerimeter(){
return 2 * (length + width);
}
}
#Test_atstract类#
public class Test_atstract {
public static void main(String[] args) {
rectangle1 rect1 = new rectangle1(80, 90);
System.out.println("矩形的面积: " + rect1.getArea());
System.out.println("矩形的周长: " + rect1.getPerimeter());
}
}
测试结果: