接口是抽象类功能的另一种实现方法,也就是一种“纯”的抽象类。在接口中所有的方法都是抽象方法,都没有方法体。java中允许一个类实现多个接口。
接口与一般类一样,本身具有数据成员与方法,但数据成员一定要赋初值,且此值不能再更改,即系统会将其自动增加final和static关键字。而方法必须是“抽象方法”。
举个栗子:
public interface Insurable {
public int getPolicyNumber();
public int getCoverageNumber();
public double calculatePremium();
public Date getExpiryDate();
}
public class Car implements Insurable{
@Override
public int getPolicyNumber() {
return 0;
}
@Override
public int getCoverageNumber() {
return 0;
}
@Override
public double calculatePremium() {
return 0;
}
@Override
public Date getExpiryDate() {
return null;
}
}
另外,实现一个接口的类也必须实现此接口的父接口,例如:
public interface DepreciatingInsurable extends Insurable {
public double computeFairMarketValue();
}
public class Car implements DepreciatingInsurable{
@Override
public double computeFairMarketValue() {
return 0;
}
@Override
public int getPolicyNumber() {
return 0;
}
@Override
public int getCoverageNumber() {
return 0;
}
@Override
public double calculatePremium() {
return 0;
}
@Override
public Date getExpiryDate() {
return null;
}
}
在接口的定义中,java允许省略定义数据成员的final关键字,方法的public及abstract关键字。
继续看示例:
interface Shape2D {
double pi = 3.14;
double area();
}
public class Circle implements Shape2D {
double radius;
public Circle(double r){
radius = r;
}
@Override
public double area() {
return pi * radius * radius;
}
}
public class Rectangle implements Shape2D {
int width,height;
public Rectangle(int w,int h){
width = w;
height = h;
}
@Override
public double area() {
return (width * height);
}
}
public class MyClass {
public static void main(String[] args){
Rectangle rect = new Rectangle(5,6);
System.out.println("Area of rect = "+rect.area());
Circle cir = new Circle(2.0);
System.out.println("Area of cir = "+cir.area());
}
}
我们不能直接用接口来创建对象,必须通过由接口实现接口的类来创建。
public class MyClass {
public static void main(String[] args){
Shape2D var1,var2;
var1 = new Rectangle(5,6);
var2 = new Circle(2.0);
System.out.println("Area of rect = "+var1.area());
System.out.println("Area of cir = "+var2.area());
}
}