接口
2022/4/10 23:13:35
本文主要是介绍接口,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
接口
基本介绍 :接口就是给出一些没有实现的方法,封装到一起,到某个类要使用的时候,再根据具体的情况把这些方法写出来,在接口中的抽象方法可以省略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(){}
接口细节
- 接口不能被实例化
- 接口中的所有方法都是public方法,接口中的抽象方法,可以不用abstract修饰
- 一个普通类实现接口,就必须将该接口的所有方法都实现,(快捷键 alt+enter)
- 抽象类去实现接口时,可以不用实现接口的方法
- 一个类同时可以实现多个接口
- 接口中的属性,只能是final的,而且是public static final 修饰符 比如:int n=1;实际上是public static final int n=1;(必须初始化)
- 接口中属性的访问形式:接口名.属性名
- 接口不能继承其他的类,但是可以继承多个别的接口
interface A extends B,C{}
- 接口的修饰符只能是public和默认,这点和类的修饰符是一样的
实现接口 VS 继承类
- 接口和继承解决的问题不同
继承的价值主要在于:解决代码的复用性和可维护性。
接口的价值主要在于:设计,设计好各种规范(方法),让其它类去实现这些方法。即更加的灵活.. - 接口比继承更加灵活
接口比继承更加灵活,继承是满足is - a的关系,而接口只需满足like - a的关系。 - 接口在一定程度上实现代码解耦[即:接口规范性+动态绑定机制]
接口的多态特性
接口可以接收实现该接口的类的对象
-
多态参数(前面案例体现)
在前面的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();//向下转型 } }
这篇关于接口的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程
- 2024-11-26Mybatis官方生成器资料详解与应用教程
- 2024-11-26Mybatis一级缓存资料详解与实战教程
- 2024-11-26Mybatis一级缓存资料详解:新手快速入门
- 2024-11-26SpringBoot3+JDK17搭建后端资料详尽教程
- 2024-11-26Springboot单体架构搭建资料:新手入门教程