当前位置: 首页 > news >正文

Java interface 接口

接口(interface)

接口的理解

接口就是规范,定义的是一组规则,体现了现实世界中“如果你是/要…则必须能…”的思想。继承是一个"是不是"的is-a关系,而接口实现则是 "能不能"的has-a关系。

接口的本质是契约、标准、规范,就像我们的法律一样。制定好后大家都要遵守。

接口的定义

定义接口的关键字:interface

声明格式:
[修饰符] interface 接口名{//接口的成员列表:// 公共的静态常量// 公共的抽象方法// 公共的默认方法(JDK1.8以上)// 公共的静态方法(JDK1.8以上)// 私有方法(JDK1.9以上)
}
  • 声明属性:必须使用public static final修饰

  • 声明方法: jdk8之前,声明抽象方法,修饰为public abstract

    ​ jkd8: 声明静态方法、默认方法

    ​ jdk9:声明私有方法

    不可以使用interface声明: 构造器、代码块等

interface的使用

接口和类的关系:实现关系

interface Flyable{//接口//全局常量public static final int MIN_SPEED = 0;      //最低速度//可以省略 public static final//自动默认为静态final的常量int MAX_SPEED = 7900;   //最高速度public abstract void fly(); //默认为抽象方法,可以省略public abstract //抽象方法,无方法体
}interface Attackable{//接口public abstract void attack();
}
class Plane implements Flyable,Attackable{//实现Flyable接口//接口中存在抽象方法:① 使用abstract修饰方法,使方法为抽象方法//                ② 重写抽象方法public void fly(){System.out.println("Plane.fly");}@Overridepublic void attack() {System.out.println("Plane.attack");}
}
具体格式:
class A extend SuperA implements B,c{}
//A是SuperA的子类
//A 是 B,C的 实现类
注意点:

一个接口中的所有属性都默认为public final修饰,为常量,赋值后不可更改

一个接口中所有的方法,都为public abstrace修饰,为抽象方法

  • 一个类可以实现多个接口
  • 类针对于接口的多实现,一定程度上就弥补了类的单继承的局限性
  • 一个类实现了一个接口,这个类必须将实现接口中所有的抽象方法进行重写,否则要将此类声明为抽象类

接口和接口的关系:继承关系

使用关键字extends进行继承

interface AA{void method1();	//抽象方法,无方法体
}interface BB{void method2();
}interface CC extends AA,BB{//接口可以多继承}

接口的多态性

接口名 变量名 = new 实现类对象
package interfaceTest;public class UsbTest {public static void main(String[] args) {//1,创建接口实现类的对象Computer computer = new Computer();Printer printer = new Printer();//2.创建接口实现类的匿名对象computer.transferDate(printer);//多态的体现computer.transferDate(new Camera());//3. 创建接口匿名实现类的对象USB usb1 = new USB(){@Overridepublic void start() {System.out.println("U盘开始工作");}@Overridepublic void stop() {System.out.println("U盘停止工作");}};computer.transferDate();}
}class Computer{ //电脑类public void transferDate(USB usb){System.out.println("设备连接成功");usb.start();System.out.println("数据传输细节操作");usb.stop();}
}class Printer implements USB{@Overridepublic void start() {System.out.println("打印机工作");}@Overridepublic void stop() {System.out.println("打印机结束工作");}
}class Camera implements USB{@Overridepublic void start() {System.out.println("照相机工作");}@Overridepublic void stop() {System.out.println("照相机结束工作");}
}
interface USB{//声明常量  省略public abstract void start();void stop();
}
http://www.lryc.cn/news/352009.html

相关文章:

  • 深入理解MySQL:查询表的历史操作记录
  • 【Centos7+JDK1.8】Jenkins安装手册
  • SpringBootWeb 篇-深入了解 Mybatis 概念、数据库连接池、环境配置和 Lombok 工具包
  • JAVA开发 基于最长公共子序列来计算两个字符串之间的重复率
  • Android HAL到Framework
  • Python数据可视化(七)
  • StringMVC
  • 前端基础入门三大核心之HTML篇 —— SVG的viewBox、width和height:绘制矢量图的魔法比例尺【含代码示例】
  • Java-Zookeeper
  • Godot游戏引擎有哪些优势
  • 一张图看懂大模型性价比:能力、价格、并发量全面PK
  • 设计井字棋游戏(一)
  • 华为手机卡顿(仅针对于部分人来说,我也不清楚是否真的有用)
  • 7、按钮无法点击
  • 开源博客项目Blog .NET Core源码学习(25:App.Hosting项目结构分析-13)
  • 第七节 ConfigurationClassParser 源码分析
  • 零基础代码随想录【Day42】|| 1049. 最后一块石头的重量 II,494. 目标和,474.一和零
  • 2024-5-24 石群电路-15
  • 功能测试:核心原理、挑战以及解决之道
  • 跨境电商赛道,云手机到底能不能化繁为简?
  • linux:信号深入理解
  • Android系统的/etc/mkshrc文件
  • LeetCode199二叉树的右视图
  • JavaScript 基础
  • DOS学习-目录与文件应用操作经典案例-type
  • QT教程-一,初识QT
  • SpringBoot搭建Eureka注册中心
  • day 38 435.无重叠区间 763.划分字母区间 56. 合并区间 738.单调递增的数字 968.监控二叉树
  • ssm/springoot养老院问诊服务预约系统_96316老年人服务系统
  • WordPress插件优化对提升性能有多大影响?