在java中,类与类之间只能单继承,不能多继承,实际需要多继承,所以需要接口。
接口里不包含普通方法,只有抽象方法。和抽象类一样,接口是从多个相似类中抽象出来的,和抽象类的区别是接口只是规范,不提供任何实现。
接口定义的是多个类公用的行为规范,通常是一种公用方法。
定义接口时不使用class关键字,而是使用interface关键字
说明:
l 修饰符若是public,说明接口可以被任何其他接口或类访问;修饰符若是默认的,说明接口只能被同一包中的其他接口或类访问。
l 接口的名称可以是任意有效的标识符
l 接口中的成员变量都是共有的、静态的、最终的常量
l 接口中的方法都是公共的、抽象的方法,仅有方法标签,没有方法体
l 接口可以继承,子接口可以继承父接口的属性和方法。Java接口的继承与类的继承不同,接口支持多继承,多个父接口之间用逗号分隔。
public interface Figure {
double PI=3.14;
void area();
}
public class Circle implements Figure {
double radius;
public Circle(double r) {
radius=r;
}
public void area() {
System.out.println("圆的面积="+PI*radius*radius);
}
}
public class Renctangle implements Figure {
double width,height;
public Renctangle(double w,double h) {
width=w;
height=h;
}
public void area() {
System.out.println("矩形的面积="+width*height);
}
}
public class Test {
public static void main(String[] args) {
Circle c=new Circle(10.0);
c.area();
Renctangle rect=new Renctangle(10.0,5.0);
rect.area();
}
}
接口和抽象类的异同:
相同:
接口和抽象类都不能被实例化,他们都位于继承树的顶端,用于被其他类实现和继承
接口和抽象类都可以包含抽象方法,实现接口或抽象类的普通子类都必须实现这些抽象方法(即子接口扩展某个父接口,将会获得父接口里定义的所有抽象方法、常量属性、内部类和枚举类定义)
不同:
接口里只能包含抽象方法,不包含已经实现的方法;抽象类中则完全可以包含普通方法;
接口里不能定义静态方法;抽象类里可以定义静态方法
接口里只能定义静态常量属性,不能定义普通属性;而抽象类里既可以定义普通属性,也可以定义静态常量属性
接口不包含构造方法;抽象类里可以包含构造方法,但并不是用于创建对象,而是让其子类调用这些构造方法来完成属于抽象类的初始化操作
接口里不能包含初始化块;抽象类完全可以包含初始化块
一个类最多只能有一个直接父类,包括抽象类;但一个类中可以直接可以直接实现多个接口,通过这些接口弥补java单继承方面的不足。