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

Java 面向对象进阶 18 JDK8、9开始新增的方法;接口的应用;适配器设计模式;内部类(黑马)

一、JDK8开始新增的方法

默认方法不是抽象方法,所以不强制被重写:

但是如果被重写,就要去掉default关键字:

public可以省略,但是default不可以省略:

public是灰色的,代表可以省略

但是default是橙色的,代表不可以省略:

idea会认为可能想写的是一个abstract类的方法,,没有写的话,idea会将其当作一个abstract类方法所以default不能省略:

如果实现了多个接口,多个接口存在相同名字的默认方法,子类就必须对该方法进行重写:(因为如果不重写的话,就不知道调用的是哪个接口的show方法)

重写后:

静态方法不能被重写:

这样写不叫重写:只是刚好在InterImpl中有一个重名的show方法:

调用接口中的静态方法:

子类把从父类继承下来的虚方法表里面的方法进行覆盖了,这才叫重写,但是私有的,最终的,静态的是不会添加到虚方法表中,所以不叫重写。

二、JDK9开始新增的方法

在JDK9以前只有这种方式:如果有重复代码,只能重写写一个方法,然后再调用show3方法;

普通的私有方法,给默认方法服务的

静态的私有方法,给静态方法服务的:

三、接口的应用:

四、适配器设计模式:

interAdapter类代码:

public abstract class interAdapter implements interA{//设为abstract,为了防止对interAdapter创建对象,因为里面都是重写的空方法,所以创建对象没有意义;@Overridepublic void method1() {}@Overridepublic void method2() {}@Overridepublic void method3() {}@Overridepublic void method4() {}@Overridepublic void method5() {}@Overridepublic void method6() {}@Overridepublic void method7() {}@Overridepublic void method8() {}@Overridepublic void method9() {}@Overridepublic void method10() {}
}

interImpl类代码:

public class interImpl extends interAdapter{//我需要用哪个方法,就重写哪个方法就可以了@Overridepublic void method5(){System.out.println("只需要method5方法");}
}

inter类代码:

public interface interA {public abstract void method1();public abstract void method2();public abstract void method3();public abstract void method4();public abstract void method5();public abstract void method6();public abstract void method7();public abstract void method8();public abstract void method9();public abstract void method10();
}

如果实现类还有父类,由于Java中不能多继承,那么可以让中间类去继承想要的类就可以了

五、内部类:

内部类可以直接访问外部类的成员,包括私有:

外部类要访问内部类的成员,必须创建对象:

内部类的应用有很多,下面列举几个常见的应用场景:

1. 实现回调函数:内部类可以通过将自身作为参数传递给外部类的方法,用于实现回调函数。当某个条件满足时,外部类调用内部类的方法来完成特定的操作。

2. 实现事件监听器:内部类可以实现事件监听器接口,在外部类中注册监听器对象,当特定的事件发生时,内部类的方法会被调用。

3. 封装复杂逻辑:内部类可以访问外部类的私有属性和方法,可以用于封装复杂的逻辑实现。内部类可以直接访问外部类的私有属性,并且可以和外部类进行私有操作,减少了类之间的耦合程度。

4. 实现迭代器:内部类可以作为外部类的成员,实现迭代器接口,可以用于遍历外部类中的数据结构。

5. 多线程编程:内部类可以作为线程的子类或实现线程接口,用于实现多线程编程。

总的来说,内部类的应用非常广泛,能够提供更加灵活和方便的编程方式,增加代码的可读性和可维护性。

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

相关文章:

  • 数据结构-二分搜索树(Binary Search Tree)
  • YOLO如何训练自己的模型
  • 05 EXTI外部中断
  • 2024.2.23
  • PHP实现分离金额和其他内容便于统计计算
  • 基础数据结构和算法《》
  • [设计模式Java实现附plantuml源码~行为型]对象间的联动~观察者模式
  • vue3+js 实现记住密码功能
  • 基于单片机的太阳能电池板自动跟踪系统的研究
  • React 模态框的设计(二)
  • 操作符详解3
  • 【C语言基础】:操作符详解(一)
  • 通俗易懂分析:Vite和Webpack的区别
  • OpenCart程序结构与业务逻辑
  • 软件License授权原理
  • C/C++实现老鼠走迷宫
  • [Linux]文件基础-如何管理文件
  • bat 查找文件所在
  • 程序员的守护神:为何电脑永不熄灭?
  • Kafka快速实战以及基本原理详解
  • 微信小程序(4)- 事件系统和模板语法
  • 【Java多线程】对线程池的理解并模拟实现线程池
  • python连接mysql数据库
  • docker用法
  • DIcom调试Planar configuration
  • C#与VisionPro联合开发——跳转页面
  • 服务端测试开发必备技能:Mock测试
  • vue3中ref创建变量取值时自动补充 .value 插件 volar
  • clickhouse的docker部署与springboot整合
  • Node.js_基础知识(计算机硬件基础)