接口的定义:
interface 接口名{
...
}
接口就是一个特殊的类
接口中不能有字段,但可以有常量,默认被public static final修饰:
interface X{
int a = 1;
}
等价于
interface X{
public static final int a = 1;
}
接口的方法:
1.接口中的所有方法,默认被public abstract修饰,也就是说接口中的所有方法都是抽象方法。
interface X{
void f1();
}
等价于
interface X{
public abstract void f1();
}
2.接口中也可以定义普通方法:
interface X {
void f1() {
...
}
}
注意:
Java中,有一个规范,当一个变量同时被static和final修饰的时候,该变量的名字中的所有字母都应该时大写的,单词和单词之间用 "_" 隔开。
例:
interface X{
String MY_NAME = "第一帅";
static final int HER_AGE = 20;
final double HIS_SALARY = 30000;
}
接口无法被实例化,因为接口中的方法都是抽象的。
接口的实现:
class 类名 implements 接口名{
//实现接口的所有抽象方法
}
接口中的抽象方法,在非抽象子类中,必须全部得以实现:
interface I{
void aa(); //接口中的方法。默认被public修饰
}
class A implements I{
public void aa(){ //所以子类重写方法时,访问修饰符也必须是public
System.out.println("A.aa()");
}
}
一个类只能继承一个类,但一个类可实现多个接口:
interface A{
void aa();
}
interface B{
void aa();
void bb();
}
class X implements A, B{
public void aa(){ //一个类实现两个接口,
//两个接口的抽象方法必须全部实现
} //如果多个接口出现了相同的方法,
public void bb(){ //只实现一次即可
}
}
一个类在继承一个类的同时,可以再去实现其他多个接口:
class X extends A implements B, C{
}
一个类实现一个接口,是一种比较特殊的“继承”关系,所以也能发生向上转型:
interface A{
}
class X implements A{
}
public class Test{
public static void main(String[] args){
X x = new X();
A a = new X(); //这里发生了向上转型
}
}
接口的扩展
接口和接口之间,时多继承的关系,也就是说,一个接口可以继承其他多个接口,等价于汇总了多个接口中的所有抽象方法到一个接口中:
interface A{
void aa();
}
interface B{
void bb();
}
interface C extends A, B{
}
class X implements C{ //接口C没有任何抽象方法,
public void aa(){ //但它继承了A和B中的所有抽象方法
}
public void bb(){
}
}
评论 (0)