Java中的接口
1、概念:接口是一种能力与约定。接口的定义:代表了某种能力。方法的定义:能力的具体实现。
2、书写格式:使用 interface 关键字定义接口,接口中定义的方法和属性都是,公开抽象方法,公开静态常量。
3、接口可以多实现,弥补了Java单继承的缺陷。可以为类扩充多种能力。
interface MyInterface{
//实际使用中写成String filed = "value"; 前缀是默认有的
public static final String filed = "value";
//void method(); 前缀是默认有的
public abstract void method();
}
接口的实现:
- 子类与父类之间的关系叫做继承
- 类与接口之间的关系叫做实现,接口可以多实现,也就是一个类可以同时 implements 多个接口。
- 接口与接口之间也可以实现多继承。
//定义抽象类 door ,抽象方法 open
abstract class door{
public abstract void open();
}
//定义接口lock
interface Lock{
public abstract void lock() ;
}
//定义接口Bell
interface Bell{
public abstract void bell();
}
//接口的多继承
interface Key extends Bell,Lock{
//抽象方法
}
//子类先继承父类,在通过implements实现接口,接口可以多实现。
//实现接口,要重写接口中所有的抽象方法。
class AntiThiedDoor extends door implements Lock,Bell{
@Override
public void open() {
// TODO Auto-generated method stub
System.out.println("门开了");
}
@Override
public void bell() {
// TODO Auto-generated method stub
System.out.println("门铃手动按响");
}
@Override
public void lock() {
// TODO Auto-generated method stub
System.out.println("门会自动上锁");
}
}
抽象类和接口的异同:
抽象类:
- 不可以实例化
- 可以有普通方法,普通属性
- 可以有抽象方法,也可以没有抽象方法
- 单继承
接口:
- 接口可以多实现
- 不可以实例化接口
- 方法都是抽象方法
- 属性都是静态常量
总结:
相同点:
- 可以编译成为字节码文件
- 不能创建对象
- 可以作为引用类型
- 具备Object类中所有的方法。
不同点:
- 接口所有属性都是公开静态常量。
- 接口所有方法都是公开抽象方法。
- 没有构造方法,静态代码块,动态代码块。
接口的引用:
仅可调用接口中独有的方法,不可以调用类中方法。可以强转回实现类本身,进行类中独有方法调用。
public class Test3 {
public static void main(String[] args) {
//swim 只能调用 Swim 接口中独有的方法
//这里实际上也是一种多态的使用
Swim swim = new Dog();
//run 只能调用 Run 接口中独有的方法
Run run = new Dog();
}
}
class Animal{
//父类方法
}
class Dog extends Animal implements Swim,Run{
@Override
public void run() {
//方法实现
}
@Override
public void swimming() {
//方法实现
}
//子类方法
}
interface Swim{
public abstract void swimming();
}
interface Run{
void run();
}
接口的好处
- 程序的耦合度降低
- 更自然的使用多态
- 设计与实现完全分离
- 更容易搭建程序框架
- 更容易更换具体实现
接口回调:
先有接口的使用者,再有接口的实现者