一.使用说明
1.接口使用interface来定义
2.Java中,接口和类是并列的两个结构
3.如何定义接口:定义接口中的成员
》jdk7及以前:只能定义全局常量和抽象方法
*全局常量:public static final 的,但是书写时,可以省略不写
*抽象方法:pubic abstract的
》jdk8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法
4.接口中不能定义构造器的!意味着接口不可以实例化
5.java开发中,接口通过让类去实现(implement)的方式来使用
》如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化
》如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类
6.java类中可以实现多个接口 ---》弥补了java单继承的局限性
》格式:class A A extends BB implements CC,DD,EE
7.接口与接口之间可以继承,而且可以多继承
8.接口的具体使用,体现多态性
9.接口,实际上可以看做是一种规范
二:举例:
例1:usb接口
//定义usb接口
interface Usb{
public void start();
public void stop();
}
//u盘实现usb接口
class Flash implements Usb{
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("usb 开始工作");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("usb 结束工作");
}
}
//打印机实现usb接口
class Print implements Usb{
@Override
public void start() {
// TODO Auto-generated method stub
System.out.println("打印机 开始工作");
}
@Override
public void stop() {
// TODO Auto-generated method stub
System.out.println("打印机 结束工作");
}
}
//电脑使用usb接口传输数据
class Computer{
public void tansfer(Usb usb) {
usb.start();
System.out.println("具体传输数据的细节");
usb.stop();
}
}
public class UsbTest {
public static void main(String[] args) {
Computer c = new Computer();
c.tansfer(new Flash());
c.tansfer(new Print());
}
}
三:java8 新特性
知识点1:接口中定义的静态方法只能通过接口来调用
知识点2:通过实现类的对象,可以调用接口中的默认方法,如果实现类重写了接口的默认方法
调用时,仍调用的是重写以后的方法
知识点3:如果子类(实现类)继承的父类和实现的接口中声明了同名同参数的默认方法,那么
子类在没重写此方法的情况下,默认调用是的父类同名同参数的方法--》类优先原则
知识点4:如果实现类实现了多个接口,而这多个接口定义了同名同参数的默认方法,
那么在实现类没重写此方法的情况下,报错--》接口冲突,要求必须要在实现类中重写此方法
知识点5:如何在子类(或实现类)的方法中调用父类、接口中被重写的方法
public void myMethod(){
method3();//调用自己定义的重写的方法
super.method3();//调用的是父类中声明的
//调用接口中的默认的方法
CompareA.super.method3();
CompareB.super.method3();
}
4面试题:
抽象类和接口的异同?
相同点: 不能实例化;都可以包含抽象方法的
不同点:
1)把抽象类和接口(Java7、Java8、java9)的定义、内部结构解释说明
2)类:单继承性 接口:多继承 ,类与接口:多实现
五:应用场景:
1.代理模式: 是java 开发中使用较多的一种设计模式,代理设计就是为其他对象提供一种代理以控制对这个对象的访问
2举例:
interface Network{
void browse();
}
class Server implements Network{
@Override
public void browse() {
// TODO Auto-generated method stub
System.out.println("服务器要实现浏览功能");
}
}
class ProxServer implements Network{
private Network network;
public Network getNetwork() {
return network;
}
public void setNetwork(Network network) {
this.network = network;
}
@Override
public void browse() {
check();
network.browse();
}
public void check() {
System.out.println("前期检查工作");
}
}
public class TestProxy {
public static void main(String []args) {
Server server = new Server();
ProxServer proServer = new ProxServer();
proServer.setNetwork(server);
proServer.browse();
}
}
3.工厂模式:实现了创建者与调用者的分离,即将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的,包括 简单工厂模式,工厂方法模式,抽象工厂模式
4.举例:
interface Car{
void run();
}
class Audi implements Car{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("奥迪车在快速的奔跑!");
}
}
class Bydi implements Car{
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("比亚迪车在快速的奔跑!");
}
}
class Factory{
public static Car getInstance(String type) {
if ("aodi".equals(type)) {
return new Audi();
}else if("Bydi".equals(type)) {
return new Bydi();
}else {
return null;
}
}
}
public class TestFactory {
public static void main(String[] args) {
Audi ao=(Audi) Factory.getInstance("aodi");
Bydi bi=(Bydi) Factory.getInstance("Bydi");
ao.run();
bi.run();
}
}