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

Java基础 8.18

1.接口注意事项和细节

  1. 接口不能被实例化
  2. 接口中所有的方法是public方法,接口中抽象方法,可以不用abstract修饰
  3. 一个普通类实现接口,就必须将该接口的所有方法都实现(快捷键alt+enter)
  4. 抽象类实现接口,可以不用实现接口的方法
  5. 一个类同时可以实现多个接口
  6. 接口中的属性,只能是final的,而且是 public static final 修饰符 比如:int a=1; 实际上是 public static final int a=1;(必须初始化)
  7. 接口中属性的访问形式:接口名.属性名
  8. 接口不能继承其它的类,但是可以继承多个别的接口

2.接口和类继承之间的比较

package com.logic.interface_;public class ExtendsVsInterface {public static void main(String[] args) {LittleMonkey littleMonkey = new LittleMonkey("wukong");littleMonkey.climbing();littleMonkey.swimming();littleMonkey.flying();}
}interface Fish {void swimming();
}interface Bird {void flying();
}class Monkey {private String name;public Monkey(String name) {this.name = name;}public void climbing() {System.out.println("猴子会爬树...");}public String getName() {return name;}public void setName(String name) {this.name = name;}
}class LittleMonkey extends Monkey implements Fish, Bird {public LittleMonkey(String name) {super(name);}@Overridepublic void swimming() {System.out.println(getName() + "通过学习在游泳...");}@Overridepublic void flying() {System.out.println(getName() + "通过学习在飞翔...");}
}

接口和继承解决的问题不同

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

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

接口比继承更加灵活

接口比继承更加灵活,继承是满足is-a的关系,而接口只需满足like-a的关系

接口在一定程度上实现代码解耦(接口规范性+动态绑定机制)

3.接口的多态

多态参数(前面案例体现)

在前面的Usb接口案例,UsbInterface usb,既可以接收手机对象,又可以接收相机对象,就体现了 接口 多态(接口引用可以指向实现了接口的类的对象)

多态数组

演示一个案例:给Usb数组中,存放Phone和相机对象,Phone类还有一个特有的方法cal,请遍历Usb数组,如果是Phone对象,除了调用Usb 接口定义的方法外,还需要调用Phone 特有方法call

package com.logic.interface_;public class InterfacePolyArr {public static void main(String[] args) {//多态数组 -> 接口类型数组Usb[] usbs = new Usb[2];usbs[0] = new Phone_();usbs[1] = new Camera_();/*给Usb数组中,存放 Phone  和  相机对象,Phone类还有一个特有的方法call(),请遍历Usb数组,如果是Phone对象,除了调用Usb 接口定义的方法外,还需要调用Phone 特有方法 call*/for (int i = 0; i < usbs.length; i++) {usbs[i].work();//动态绑定..//和前面一样,我们仍然需要进行类型的向下转型if (usbs[i] instanceof Phone_) {//判断他的运行类型是 Phone_((Phone_) usbs[i]).call();}}}
}interface Usb {void work();
}class Phone_ implements Usb {public void call() {System.out.println("手机可以打电话...");}@Overridepublic void work() {System.out.println("手机工作中...");}
}class Camera_ implements Usb {@Overridepublic void work() {System.out.println("相机工作中...");}
}

接口存在多态传递现象

package com.logic.interface_;/*** 演示多态传递现象*/
public class InterfacePolyPass {public static void main(String[] args) {//接口类型的变量可以指向,实现了该接口的类的对象实例IG ig = new Teacher();//如果IG 继承了 IH 接口,而Teacher 类实现了 IG接口//那么,实际上就相当于 Teacher 类也实现了 IH接口.//这就是所谓的 接口多态传递现象.IH ih = new Teacher();}
}interface IH {void hi();
}interface IG extends IH {
}class Teacher implements IG {@Overridepublic void hi() {}
}

http://www.lryc.cn/news/625061.html

相关文章:

  • 贪吃蛇游戏实现前,相关知识讲解
  • 【LeetCode 热题 100】198. 打家劫舍——(解法二)自底向上
  • MyBatis学习笔记(上)
  • 从双目视差图生成pcl点云
  • linux 内核 - 进程地址空间的数据结构
  • Chromium base 库中的 Observer 模式实现:ObserverList 与 ObserverListThreadSafe 深度解析
  • 套接字超时控制与服务器调度策略
  • 单例模式及优化
  • 高防IP如何实现秒级切换?
  • 【Day 30】Linux-Mysql数据库
  • IDE开发系列(2)扩展的IDE框架设计
  • STC8单片机矩阵按键控制的功能实现
  • 分治-归并-493.翻转对-力扣(LeetCode)
  • Flutter 自定义 Switch 切换组件完全指南
  • Python 面向对象三大特性详解(与 C++ 对比)
  • Android Handler 线程执行机制
  • flutter项目适配鸿蒙
  • 【展厅多媒体】互动地砖屏怎么提升展厅互动感的?
  • 2025年最新美区Apple ID共享账号免费分享(持续更新)
  • 数组学习2
  • Java面试题储备14: 使用aop实现全局日志打印
  • 【HTML】document api
  • Vue 3中watch的返回值:解锁监听的隐藏技巧
  • C++---有符号和无符号整数的位移操作
  • RabbitMQ:数据隔离
  • kafka 冲突解决 kafka安装
  • Unity进阶--C#补充知识点--【Unity跨平台的原理】Mono与IL2CPP
  • 探索性测试:灵活找Bug的“人肉探测仪”
  • MongoDB Windows 系统实战手册:从配置到数据处理入门
  • keil错误:Error: failed to execute ‘D:\Keil\C51\BIN\BIN\A51.EXE‘