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

【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.xdnf.cn/news/10007.html

相关文章:

  • 解决开发者技能差距:AI 在提升效率与技能培养中的作用
  • 00 QEMU源码中文注释与架构讲解
  • 领域驱动设计 (Domain-Driven Design, DDD)
  • MyBatis操作数据库
  • Vue3使用vue-web-screen-shot实现截图功能
  • Windows SSDT Hook(二)
  • 【软件设计】通过软件设计提高 Flash 的擦写次数
  • 每日Prompt:指尖做画
  • kuboard自带ETCD存储满了处理方案
  • (21)量子计算对密码学的影响
  • EasyExcel复杂Excel导出
  • 测试用例篇章
  • C语言创意编程:用趣味实例玩转基础语法(4)
  • CIO大会, AI课笔记手稿分享
  • VScode ios 模拟器安装cocoapods
  • Java Spring Boot 自定义注解详解与实践
  • `docker commit` 和 `docker save`区别
  • 每日c/c++题 备战蓝桥杯(P1011 [NOIP 1998 提高组] 车站)
  • 论文速读《UAV-Flow Colosseo: 自然语言控制无人机系统》
  • If possible, you should set the Secure flag for these cookies 修复方案
  • 操作系统原理第8章:文件管理 重点内容
  • 2025.05.30【转录组】|Ribo-seq数据流程详解(一 质量控制)
  • split_conversion将json转成yolo训练用的txt,在直接按照8:1:1的比例分成训练集,测试集,验证集
  • RuoYi前后端分离框架集成手机短信验证码(二)之前端篇
  • 学习vue3阶段性复习(插槽,Pinia,生命周期)
  • VSCode+Cline 安装配置及使用说明
  • vue+threeJs 绘制3D圆形
  • Linux 的主要时钟类型
  • 菜鸟之路Day36一一Web开发综合案例(部门管理)
  • ARXML解析与可视化工具