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

【Java学习笔记】接口

接口

应用场景引出

请添加图片描述


一、接口的介绍

1. 接口的基本结构

interface 接口名{属性抽象方法
}

引出关键字:implements

2. 子类实现接口

class a implements 接口名{}

3. 接口中的属性说明:属性默认是public static final修饰的

4. 接口中的方法说明

5. 代码示例:场景引入的实现

package interface_;public class main {public static void main(String[] args) {person_a person_a = new person_a();person_b person_b = new person_b();interface_implement.t(person_a);System.out.println("============================");interface_implement.t(person_b);}
}interface database_tool{public void connect();public void close();}class interface_implement{public static void t(database_tool n){n.connect();n.close();}
}class person_a implements database_tool{@Overridepublic void connect() {System.out.println("程序员a  连接  了mysql数据库");}@Overridepublic void close() {System.out.println("程序员a  关闭  了mysql数据库");}
}class person_b implements database_tool{@Overridepublic void connect() {System.out.println("程序员b  连接  了oracle数据库");}@Overridepublic void close() {System.out.println("程序员b  连接  了oracle数据库");}
}// 输出结果
程序员a  连接  了mysql数据库
程序员a  关闭  了mysql数据库
============================
程序员b  连接  了oracle数据库
程序员b  连接  了oracle数据库

代码解释


二、接口的使用细节


三、访问接口中属性的三种方式

package c;public class main {public static void main(String[] args) {B b = new B();System.out.println(b.a);System.out.println(A.a);System.out.println(B.a);}
}interface A{int a = 10; // 等价于 public static final a = 10;
}class B implements A{}// 输出结果
10
10
10

说明


四、接口 VS 继承

核心理解:接口是对 Java 中单继承机制的补充说明

(1)继承的价值主要在于:解决代码的复用性和可维护性

(2)接口的价值主要在于:设计好各种规范(方法),让其它类去实现这些方法,更加的灵活

案例说明:通过接口让猴子实现鱼类的游泳方法鸟类的飞行功能

package a;public class main {public static void main(String[] args) {monkey monkey = new monkey("monkey");monkey.climb_tree();monkey.swim();monkey.fly();}
}interface fish{void swim();  // 默认是 public
}interface bird{void fly();  // 默认是 public
}// 类可以继承多个接口
class monkey implements fish,bird{String name;// 构造器public monkey(String name){this.name = name;}public String getName() {return name;}@Overridepublic void swim() {System.out.println(getName() + "通过学习,获得——>鱼类的swim()方法");}@Overridepublic void fly() {System.out.println(getName() + "通过学习,获得——>鸟类的fly()方法");}public void climb_tree(){System.out.println(getName() + "本身拥有——>climb_tree()方法");}
}// 输出结果
monkey本身拥有——>climb_tree()方法
monkey通过学习,获得——>鱼类的swim()方法
monkey通过学习,获得——>鸟类的fly()方法

代码解释


五、接口 VS 多态

多态的体现

  • (1)多态参数(只要是实现了接口的类,都可以把类作为参数传入接口调用的方法,实现调用接口的功能)

  • (2)多态数组

    • 说明:可以定义一个接口类型的数组,数组元素可以是实现了接口的类,之后完成一些具体要求

  • (3)多态传递

(1)代码示例:多态数组

要求:编写 a 类,b 类实现接口,遍历数组,调用共有的方法,如果遍历的是 b 类,即调用独有的方法

package a;public class main {public static void main(String[] args) {arr[] interface_arr = new arr[2];interface_arr[0] = new a();interface_arr[1] = new b();for (int i = 0; i < interface_arr.length; i++) {interface_arr[i].shared_method();// 如果是b对象就调用其独有的方法if(interface_arr[i] instanceof b){((b) interface_arr[i]).unique_method();}}}
}interface arr{void shared_method();
}class a implements arr{public void shared_method(){System.out.println("a类中调用了共有的方法");}
}class b implements arr{public void shared_method(){System.out.println("b类中调用了共有的方法");}public void unique_method(){System.out.println("调用了b类独有的方法");}
}// 输出结果
a类中调用了共有的方法
b类中调用了共有的方法
调用了b类独有的方法

(2)代码示例:多态传递

package d;public class main {public static void main(String[] args) {B b = new test_class();A a = new test_class();}
}interface A{void a();
}interface B extends A{void b();
}class test_class implements B{@Overridepublic void a() {}@Overridepublic void b() {}
}

代码解释

http://www.dtcms.com/a/222775.html

相关文章:

  • 群晖synology nas安装curl教程
  • 004时装购物系统技术解析:构建智能时尚消费平台
  • 领域驱动设计 (Domain-Driven Design, DDD)
  • oracle goldengate实现postgresql 到 postgresql的实时同步
  • 交错推理强化学习方法提升医疗大语言模型推理能力的深度分析
  • React与Vue核心区别对比
  • HAProxy搭建web群集
  • ​什么是RFID电子标签​
  • 十二、【核心功能篇】测试用例列表与搜索:高效展示和查找海量用例
  • Day 34 训练
  • Sublime Text 4格式化JSON无效的解决方法
  • vscode命令行debug
  • NIO知识点
  • 电路笔记(通信):CAN 仲裁机制(Arbitration Mechanism) 位级监视线与特性先占先得非破坏性仲裁
  • 回车键为什么叫做“回车键”?
  • Spring Boot 应用中实现配置文件敏感信息加密解密方案
  • LINUX530 rsync定时同步 环境配置
  • 量化qmt跟单聚宽小市值策略开发成功
  • [春秋云镜] CVE-2023-23752 writeup
  • 前端面试准备-3
  • Agent + MCP工具实现数据库查询
  • 深度剖析Node.js的原理及事件方式
  • day14 leetcode-hot100-25(链表4)
  • 动态规划之网格图模型(一)
  • 单元测试报错
  • 【ClickHouse】RollingBitmap
  • [3D GISMesh]三角网格模型中的孔洞修补算法
  • Ubuntu 18.04 上源码安装 protobuf 3.7.0
  • java/mysql/ES下的日期类型分析
  • 1、python代码实现与大模型的问答交互