本章内容
为什么需要接口?
接口和抽象类的区别
为什么需要接口?
接口的定义:A
接口就是比"抽象类"还"抽象"的"抽象类"
接口的作用:
-
可以更加规范的对子类进行约束
-
全面地专业地实现了:规范和具体实现地分离
接口和抽象类地区别
抽象类
特点:
抽象类还提供了某些具体实现---某些普通的方法
接口
特点:
-
不提供任何实现---不提供任何普通方法
-
接口中所有方法都是抽象方法
-
接口是完全面向规范的,规定了一批类具有的公共方法规范
从接口的实现者角度看
接口定义了可以向外部提供的服务
从接口的调用者角度看
接口定义了实现者能提供那些服务
接口的作用
两个模块之间通信的标准
做系统时就是使用"面向接口"的思想来设计系统
接口和实现类不是父子关系,是实现规则的关系
举例:
定义一个接口Runnable,Car实现它能在地上跑,Train实现它也能在地上跑,任何东西实现了Runnable接口都能在地上跑
浅谈接口的本质
接口的本质是契约
就像法律意义,制定好了以后大家都遵守
面向对象的精髓是对对象抽象,最能体现抽象这一点的就是接口
设计模式只针对具备了抽象能力的语言(C++、Java、C#等),因为设计模式所研究的实际上就是如何合理的去抽象
区别
-
普通类:具体实现
-
抽象类:具体实现,规范(抽象方法)
-
接口:规范!
转到项目中就是
-
项目分层
-
层与层之间通过接口进行调用,而不是在通过类的调用
-
接口提供也是提供一层接口,因为接口只有抽象方法,比较稳定。不管具体的实现。随时可以改具体的实现
接口的声明格式:
[访问修饰符] interface 接口名 [extends 父接口1, 父接口2...]{
常量定义;
方法定义;
}
接口实例:
package com.cxl;
/**
* 测试接口和实现类
* @author Lucifer
*/
public class TestInterface {
public static void main(String[] args) {
/*找一个飞行器,方法是创建对象,但是接口不能实例化,所以要实例化实现了接口的类*/
Volant v = new Angel(); //把子类实现了接口的对象赋予一个类型,需要实现哪个接口就赋给哪个接口
/*
写了Volant意味着编译器把他识别成了Volant
会使用Volant里面的方法
虽然Angle里面有其他方法但是不能被调用---编译器只认识接口类型
*/
v.fly();
Honest h = new GoodMan();
h.helpOther();
}
}
/**
* 飞行接口,只要实现了这个接口的都是飞行器
* @author Lucifer
*/
interface Volant{
/*定义飞行方法*/
public abstract void fly();
/*定义飞行高度*/
public static final int FLY_HEIGHT = 1000;
}
/**
* 善良接口,实现了这个接口的都是天使
* @author Lucifer
*/
interface Honest{
/*定义善良的方法*/
public abstract void helpOther();
}
/**
* 定义实现类,用于实现接口
* @author Lucifer
*/
class Angel implements Volant,Honest{
/*
实现类可以实现一个接口也可以实现多个接口---多继承
由于接口当中的所有都是规范的---抽象的
所以实现的时候全部都需要重写
*/
/*重写fly方法*/