接口
Java支持单重继承机制,不支持多重继承。单继承机制使得Java结构简单,层次清楚,易于管理,但在实际应用中也需要使用多重继承功能。为了实现像C++中的多重继承,Java中引入了接口概念。
- 接口定义
接口是由常量和抽象方法组成的特殊类,刻画了类与类之间合作的标准。接口定义由interface引导,分为接口的声明和接口体。在接口体中只进行方法声明,不能进行方法的实现。
[public] interface 接口名 [extend 父接口名列表]{
[public][static]][final]域类型 域名 = 常量值; //常量域声明
[public][abstract][native]返回值 方法名(参数列表)[throw 异常列表]; //抽象方法声明
}
注意:
①interface是声明接口的关键字,可以把接口看成一个特殊类。
②用户public修饰的是公共接口,可被所有的类和接口使用,且该接口中的方法和变量也全部为public。如果是默认的修饰符的接口,则只能被同一个包中的其他类和接口使用。
③接口具有继承性,一个接口可以继承多个父接口,父接口间用逗号分隔。
④系统默认接口中所有属性的修饰都是public static final.
⑤系统默认接口中所有方法的修饰都是public abstract.
⑥在接口中对抽象方法声明时,只能给出这些抽象方法的方法名、返回值和参数列表,而不能定义方法体,即这些借口仅是规定了一组信息的交换、传输和处理的“接口”。
public interface Stu_info {
int year = 2018;//定义在接口中的变量全部隐含为final和static,因此成员变量year必须设置初值。
int age();
void out(); //接口中只有方法声明,没有方法实现
}
- 实现接口
接口是抽象类的一种,不能直接用于创建对象。接口的作用在于规定一些功能的框架。一旦一个接口被定义,一个或多个类就可以实现该接口。用关键字implement声明一个类将实现一个接口。
[<修饰符>]class<类名>[extends<超类名>][implements<接口名1>,<接口名2>,...] //<修饰符>可以是public,也可省略。
注意:
①一个类可以实现多个接口,用逗号分隔接口列表。
②如果实现某接口的类**不是**abstract的抽象类,则在类的定义部分为所有抽象方法定义方法体,而且方法头部分应该与接口中的定义完全一致,即有完全相同的返回值和参数列表。
③如果实现某接口的类是 abstract的抽象类,则它可以不实现该接口所有的方法。但该类的任一非抽象子类,它的父类所实现的接口中所有抽象方法都必须存在实在的方法体。这些方法体可以来自抽象父类,也可来自子类自身,但不允许存在未被实现的接口方法。这体现了非抽象类中不能存在抽象方法的原则。
④接口的抽象方法的访问限制符都已指定为public,一个类在实现该接口时,必须实现接口中所有方法,并且方法必须声明为public。
一个类实现一个接口:
public class Student implements Stu_info {
String name;
String Sex;
int birth_year;
public Student(String name, String sex, int birth_year) {
this.name = name;
Sex = sex;
this.birth_year = birth_year;
}
public int age() {
return year-birth_year;
}
public void out() {
System.out.println(this.name +" " + this.Sex +" " +this.age()+"岁");
}
public static void main(String[] args) {
Student s1 = new Student("Jackson", "男", 2000);
s1.out();
}
}
运行结果:
多个类实现同一接口:
interface fee {
public void charge();
}
public class Apple implements fee {
public void charge() {
System.out.println(" apple: 10元1斤");
}
}
public class Banana implements fee {
public void charge() {
System.out.println("banana: 15元2斤");
}
}
public class Fruit {
public static void main(String[] args) {
Apple red = new Apple();
Banana yellow =new Banana();
red.charge();
yellow.charge();
}
}
运行结果:
一个类实现多个接口:
interface Shape {
double PAI = 3.14;
double getArea();
}
interface showShape {
void showInfor();
}
public class Circle implements Shape, showShape {
int r;
public Circle(int r) {
this.r = r;
}
public double getArea() {
return r*r*PAI;
}
public void showInfor() {
System.out.println("r="+ r + "\t the area: " + getArea());
}
public static void main(String[] args) {
Circle c=new Circle(10);
c.showInfor();
}
运行结果: