接口
官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现 ,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
包含内容:
(Java 7)变量,抽象方法
(Java 8)默认方法,静态方法
(Java 9)私有方法
为什么要使用接口?
接口可以解决Java无法多继承的缺陷
定义接口方法 :关键字为interface
public interface USB {//变量//方法体}
定义接口类(实现接口)方法
public class computer implements USB {//方法体}
1. 抽象方法(abstract)
使用规则:接口的实现类必须覆盖重写(实现)接口中的抽象方法 去掉abstract关键字,加上方法体大括号
使用方法:接口类对象.方法名称();
接口
public interface USB {public abstract void read(); //抽象方法——读}
接口类
public class computer implements USB {@Override //覆盖重写public void read() {System.out.println("这是一个抽象方法");}}
2.默认方法(default)
目的:实现接口升级,无需再在接口类中重写
使用方法:接口类对象.方法名称();
public interface USB {public default void method(){System.out.println("这是一个默认方法");}}
3.静态方法(static)
目的:同类对象共享的内容
使用方法:接口名称.方法名称();
public interface USB {public static void method(){System.out.println("这是一个静态方法");}}
4.私有方法
私有方法 只有接口中的静态/默认方法可以使用 private
多态
多态是java继封装性,继承性之后的第三大特性,extends继承和implements接口实现,是多态的前提
为什么要用多态? 我们现实中的事物常常会有许多形态,比如小明即是一个人也是一个学生,
代码中体现多态,就是父类引用指向子类对象
向上转型格式:
父类类型 变量名 = new 子类类型接口名称 变量名 = new 实现类名称
向下转型格式:
子类类型 变量名 = (子类类型) 父类对象实现类名称 对象名称 = (实现类名称) 接口名称
向上转型的意义:当接口中的方法已经能够满足需求时,这样更加安全方便
向下转型的意义:能够访问接口类中的独有方法,这些方法接口中不存在
主方法中
访问成员方法:new谁就优先使用谁 没有向上找
访问成员变量
1.直接通过对象名称访问:看等号左边是谁 优先使用 没有则向上找
2.间接通过成员方法访问:看方法属于谁 优先使用 没有则向上找
总结一句话就是:
成员变量)编译看左边,运行看左边
成员方法)编译看左边,运行看右边
举个例子
我建立了一个USB的接口,它的功能是(打开/关闭)设备.
public interface USB {public abstract void open(); //打开设备public abstract void close(); //关闭设备}
它拥有两个接口类(鼠标和键盘)来实现接口
这两个接口类有覆盖方法和自己独有的方法
鼠标接口类
public class Mouse implements USB{@Overridepublic void open() {System.out.println("打开鼠标");}@Overridepublic void close() {System.out.println("关闭鼠标");}/*** Mouse独有的方法*/public void click(){System.out.println("点击鼠标");}}
键盘接口类
public class KeyBoard implements USB{@Overridepublic void open() {System.out.println("打开键盘");}@Overridepublic void close() {System.out.println("关闭键盘");}/*** KeyBoard独有方法*/public void click1(){System.out.println("敲击键盘");}}
有一个电脑设备去使用接口
public class Cmoputer {//笔记本自己的方法public void PowerOn(){System.out.println("笔记本开机");}public void PowerOff(){System.out.println("笔记本关机");}//使用设备方法public void useDevice(USB obj){obj.open(); //打开设备if(obj instanceof Mouse){Mouse useMouse = (Mouse)obj; //如果obj对象是Mouse类创建 就向下转型useMouse.click(); //调用Mouse类中click独有的方法}else if(obj instanceof KeyBoard){KeyBoard useKeyBoard =(KeyBoard)obj; //如果obj对象是KeyBoard类创建 就向下转型useKeyBoard.click1();}obj.close(); //关闭设备}}
在主方法中我们可以测试
public class Demo01Test {public static void main(String[] args) {Cmoputer cmoputer = new Cmoputer();//创建一个computer对象USB mouse = new Mouse(); //向上转型cmoputer.PowerOn(); //笔记本自己的方法cmoputer.useDevice(mouse); //接口实现的方法cmoputer.PowerOff(); //笔记本自己的方法}}
测试结果:笔记本开机打开鼠标点击鼠标 //通过向下转型实现接口没有 但是接口类中拥有的方法关闭鼠标 笔记本关机
以上代码的示例图