接口interface 是一个特殊的抽象类
1.所有的属性都是公开静态常量
2.所有的方法都是公开抽象方法
3.没有构造方法
属性和方法的修饰符可以不写,默认是public static final(属性)和 public abstract(方法)
子实现类的关键字implements,效果等同于extends,只不过是接口的专用关键字
一个类去实现接口,如果这个类不希望也成为抽象类,就必须实现接口中所有的方法,否则这个类必须是抽象类
子接口也是用extends关键词
1.接口和接口之间可以多继承
interface A{
void method1();
}
interface B{
void method2();
}
interface C extends A,B{}
2.一个类在继承另外一个类的同时,还可以实现多个接口。必须先写继承类,再写实现的接口
interface Car{}
interface House{}
class Money{}
class Rmb extends Money implements Car,House{} //人民币继承钱 实现 车子房子
3.Person p = (Person)Animal 只要两边有一个是接口类型的,这句话就能编译通过
利用接口实现多继承,不会破坏类之间树状关系的简单性
利用接口解耦,实现java的弱耦合性
把标准的使用者和标准的实现者分离
接口的回调
在定义接口之后,先有接口的使用者,后有接口的实现者,使用者通过接口调用实现者中的方法
class TableLamp{
//直接使用接口Bulb
public void on(Bulb b){
b.shine();
}
}
//接口Bulb
interface Bulb{
void shine();
}
//子实现类YellowBulb实现接口
class YellowBulb implements Bulb{
public void shine(){
System.out.println("发黄光");
}
}
//子实现类RedBulb实现接口
class RedBulb implements Bulb{
public void shine(){
System.out.println("发红光");
}
}
public class TestTableLamp{
public static void main(String []args){
TableLamp tl = new TableLamp(); //创建台灯对象
YellowBulb yb = new YellowBulb(); //创建YellowBulb对象
RedBulb rb = new RedBulb(); //创建RedBulb对象
tl.on(yb); //发黄光
tl.on(rb); //发红光
}
}
JDK高版本对接口语法升级
(1)JDK8.0版本接口的升级内容
可以定义默认方法
interface DefaultInter{
default void method(){
System.out.println("我是接口的默认方法");
}
}
a.语法:default 返回值类型 方法名(形参列表){}
b.注意:
接口中默认方法中的default不再是访问修饰符,代表此方法可以写方法的实现部分
接口中 默认方法 访问权限public
可以定义静态方法
interface StaticInter{
static int add(int a,int b){
return a+b;
}
}
a.语法:public static 返回值类型 方法名(形参){}
b.注意: 接口中静态方法默认访问权限也是public 可以省略
c.使用:接口名.静态方法名(实参);
(2)JDK9.0版本接口中升级:可以定义私有方法
语法: private 返回值类型 方法名(形参列表){}
接口的分类:
(1)常量接口: 接口中只有公开静态常量,没有定义方法 —>应用不广泛
interface A{
int A = 10;
}
(2)标记接口: 空接口,接口中没有定义任何的常量和方法,例如IO对象序列化
interface B{}
(3)普通接口: 定义至少一个抽象方法 —> 开发广泛应用
interface C{
int C = 11;
void method();
void prime();
}
(4)函数式接口: 是一种特殊的普通接口,接口中只有一个抽象方法,对静态方法和默认方法没有要求
interface D{
void method();
}