基本介绍 :接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,再根据具体的情况把这些方法写出来,在接口中的抽象方法可以省略abstract关键字。
语法:
interface 接口名{ //属性 //方法 } class 类名 implements 接口名{ //自己的属性 //自己的方法 //必须实现的接口的抽象方法 }
代码
public interface UsbInterface { //接口 //规定接口的相关方法 public void start(); public void stop(); } public class Camera implements UsbInterface{//实现接口,就是把接口方法实现 @Override public void start() { System.out.println("相机开始工作..."); } @Override public void stop() { System.out.println("相机停止工作...."); } } //Phone 类实现 UsbInterface //即 Phone 类需要实现 UsbInterface 接口规定/声明的方法 public class Phone implements UsbInterface { @Override public void start() { System.out.println("手机开始工作..."); } @Override public void stop() { System.out.println("手机停止工作....."); } } public class Computer{ public void work(UsbInterface usbInterface){ usbInterface.satrt(); usbInterface.stop(); } } public class Interface01 { public static void main(String[] args) { //创建手机,相机对象 //Camera 实现了 UsbInterface Camera camera = new Camera(); //Phone 实现了 UsbInterface Phone phone = new Phone(); //创建计算机 Computer computer = new Computer(); computer.work(phone); //把手机接入到计算机 System.out.println("==============="); //把相机接入到计算机//把相机接入到计算机 computer.work(camera); } }
public interface DBInterface { //项目经理 public void connect();//连接方法 public void close();//关闭连接 } //mysql操作 public class MysqlDB implements DBInterface { @Override public void connect() { System.out.println("连接 mysql"); } @Override public void close() { System.out.println("关闭 mysql"); } } //oracle操作 public class OracleDB implements DBInterface{ @Override public void connect() { System.out.println("连接 oracle"); } @Override public void close() { System.out.println("关闭 oracle"); } } public class Interface03 { public static void main(String[] args) { MysqlDB mysqlDB = new MysqlDB(); test(mysqlDB); OracleDB oracleDB = new OracleDB(); test(oracleDB); } public static void test(DBInterface db) { db.connect(); db.close(); } }
jdk7.0前,接口里的所有方法都没有方法体
public void function();
jdk8.0后接口类可以有静态方法(加上static),默认方法,(需要在前面default),也就是说接口中可以有方法的具体实现
default public void function(){}
public static void function(){}
interface A extends B,C{}
接口可以接收实现该接口的类的对象
多态参数(前面案例体现)
在前面的Usb接口案例,UsbInterface usb,既可以接收手机对象,又可以接收相机对象,就体现了接口多态(接口引用可以指向实现了接口的类的对象)
多态数组
案例:给Usb数组中,存放Phone和相机对象,Phone类还有一个特有的方法call() ,请遍历Usb数组,如果是Phone对象,除了调用Usb接口定义的方法外,还需要调用Phone特有方法call。
Usb usbs[] = new Usb[2]; usbs[0] = new Phone(); usbs[1] = new Camera(); for (inti= 0; i < usbs.length; i++) { usbs[i].start(); usbs[i].stop(); if (usbs[i] instanceof Phone) { ((Phone)usbs[i].call();//向下转型 } }