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

【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.lryc.cn/news/2393521.html

相关文章:

  • 代码随想录打卡|Day50 图论(拓扑排序精讲 、dijkstra(朴素版)精讲 )
  • Wan2.1 图生视频模型内部协作流程
  • SI24R05国产低功耗2.4GHz+125K低频唤醒SoC人员定位/畜牧业牛羊定位/资产管理定位方案芯片
  • qt QAxWidget
  • 机器学习与深度学习04-逻辑回归02
  • CQF预备知识:Python相关库 -- NumPy 基础知识 - 通用函数
  • 基于ELK的分布式日志实时分析与可视化系统设计
  • @Async 注解 走的是主线程 还是子线程呢
  • 前端面经 React 组件常见的声明方式
  • 酒店管理系统设计与实现
  • OpenCV---pointPolygonTest
  • Qt 的简单示例 -- 地址簿
  • Linux 下 C 语言实现工厂模式
  • 什么是DevOps的核心目标?它如何解决传统开发与运维之间的冲突?​
  • RocketMQ 死信队列(DLQ)实战:原理 + 开发 + 运维 + 架构应用指南
  • Android studio 查看aar源码出现/* compiled code */
  • 用HTML5+JavaScript实现汉字转拼音工具
  • 基于Java,SpringBoot,Vue,UniAPP医院预约挂号买药就诊病例微信小程序系统设计
  • ONNX模型的动态和静态量化
  • PHP 垃圾回收高级特性
  • OpenFeign vs MQ:微服务通信如何选型?详解同步与异步的适用场景
  • 如何用命令行将 PDF 表格转换为 HTML 表格
  • html5的响应式布局的方法示例详解
  • 如何用Python抓取Google Scholar
  • 电脑革命家测试版:硬件检测,6MB 轻量无广告 清理垃圾 + 禁用系统更新
  • Wireshark对usb设备进行抓包找不到USBPcap接口的解决方案
  • 题目 3298: 蓝桥杯2024年第十五届决赛真题-兔子集结
  • Unity开发之Webgl自动更新程序包
  • 深入理解设计模式之状态模式
  • Socket 编程 UDP