Java学习——39、接口
Java中的类只能单继承。
但接口可以多继承。
接口(interface)是一组抽象方法、常量和内嵌类型的集合。接口是一种数据类型,接口采用抽象的形式来描述约定。
1、 接口的声明
用关键字interface来声明接口,其语法格式如下:
【public】 interface 接口【extends 父接口列表】
{
【public】【final】数据类型成员变量=常量值;
【public】【abstract】返回值类型成员方法【(参数列表)】;
}
注:(1)接口可继承多个父接口,中间用逗号隔开
(2)接口中的成员变量只能是常量
(3)接口中的方法只能是抽象方法
(4)接口的访问控制权限只有public或缺省
(5)接口不能创建实例。
例:声明接口
public interface Area{
public abstract double area();
}
2、接口的实现
用关键字implements声明一个类来实现接口。其语法格式如下:
【修饰符】 class 类【extends 父类】【extends 接口列表】
例:声明类Circle来实现上述接口Area
public class Circle implements Area{
private double radius;
public Circle(double radius) {
this.radius=radius;
}
public double area() {
return Math.PI*radius*radius;
}
}
注:一个非抽象类如果要实现接口,必须实现接口中的所有抽象方法,否则就要声明为抽象类。
3、接口可以多继承。
一个接口可以继承多个父接口,例:有两个接口Area和Zc,分别声明如下:
public interface Area{
public abstract double area();
}
public interface Zc{
public abstract double zc();
}
再声明一个接口Js,可以继承这两个接口,并可声明新的抽象方法。
public interface Js extends Area,Zc{
public abstract double get();
}
此Js接口继承了Area和Zc接口,因此继承了Area和Zc中的两个抽象方法area()和zc(),同时还有一个新增的抽象方法get。
如此一个类要继承此Js接口,必须实现这三种方法。
4、 简单例题
以上述为简单例题,有两个接口Area:计算面积,Zc:计算周长。
两接口中分别各有一个抽象方法,area()可计算面积;zc()可计算周长。
以类Circle来实现以上两个接口。
完整代码如下:
//Area.java
public interface Area {
public abstractd ouble area();
}
//Zc.java
public interface Zc {
public abstract double zhouchang();
}
//Circle.java
public class Circle implements Area,Zc{//实现两个接口,中间用逗号隔开
private double radius;
public Circle(double radius) {
this.radius=radius;
}
public double area() {//实现Area接口中的抽象方法
return Math.PI*radius*radius;
}
public Circle() {
radius=1.0;
}
public double getRadius() {
returnradius;
}
public double zhouchang() {//实现Zc接口中的抽象方法
return 2*Math.PI*radius;
}
public static void main(String args[]) {
Circle c=new Circle();
System.out.println("半径为"+c.getRadius()+"的圆\n面积为:"+c.area()+"\n周长为:"+c.zhouchang());
Circle c1=new Circle(3.3);
System.out.println("半径为"+c1.getRadius()+"的圆\n面积为:"+c1.area()+"\n周长为:"+c1.zhouchang());
}
}
其运行结果如下:
半径为1.0的圆
面积为:3.141592653589793
周长为:6.283185307179586
半径为3.3的圆
面积为:34.21194399759285
周长为:20.734511513692635