类的覆盖的实现方式

这是两个月前在工作中遇到的问题,重构的项目引入了swagger,但是有些地方swagger的实现并不完善,譬如,在没有指定bean的字段的数据类型时,swagger默认当做String处理,而实际上可能是Integer或者Long,这时就会抛出NumberFormatException,虽然并不影响使用,但是看到这样的日志也会很不爽。于是新建了同名目录,将报错的类修改了一行代码。
![在这里插入图片描述](https://img-blog.csdnimg.cn/eed693cda383485e9000df1f92d9d221.jpeg#pic_center在这里插入图片描述

但是,为什么这样可以覆盖jar包中的类呢?
最开始是刚工作的时候,见到有的老人这样搞,来实现一些骚操作,个人一直是知其然不知所以然。
搜索了一下,找到这几篇文章:
jvm之java类加载机制和类加载器(ClassLoader)的详解
一文搞懂双亲委派模型
通俗易懂的双亲委派机制

在这里插入图片描述
借文中的这张图来理解
简单讲就是,这是利用了java的类加载机制。jvm在加载类的时候,会使用递归的方式,一遍一遍的寻找这个类的父类,加载父类也就是将父类读取进缓存,当其他类也继承相同父类时,会首先从缓存中寻找是否已经存在相同的类。这是一个自上至下的加载过程。
按照这种规则,将从项目中自己定义的类开始,向下层递归找到父类,再开始加载。在这里,项目中自己定义的类就属于顶层调用,引入的jar包、运行的jre,都属于底层调用。因此自己定义的类就可以覆盖底层的jar包的类了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我理解了你的问题。下面是一个基本的示例代码,用于定义一个学生实现Comparable接口: ``` public class Student implements Comparable<Student> { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } // 覆盖Object中的toString方法 @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } // 实现Comparable接口中的compareTo方法 @Override public int compareTo(Student other) { // 比较两个学生的年龄 return Integer.compare(this.age, other.age); } } ``` 在上面的代码中,我们定义了一个名为Student的,并实现了Comparable接口。该有两个属性name和age,分别表示学生的姓名和年龄。我们还覆盖了Object中的toString方法,以便在打印学生对象时更方便地查看其属性。最后,我们实现了Comparable接口中的compareTo方法,该方法将比较两个学生的年龄,并返回结果。 这里需要注意的是,compareTo方法必须返回一个整数值,表示两个对象的大小关系。如果返回负数,则当前对象小于另一个对象;如果返回零,则两个对象相等;如果返回正数,则当前对象大于另一个对象。在上面的代码中,我们使用了Integer中的compare方法来比较两个学生的年龄,这是一种比较简单和常见的方法。当然,你可以根据实际的需求来定义自己的比较方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值