0

0

Java抽象类与接口怎么定义使用

WBOY

WBOY

发布时间:2023-05-05 19:43:05

|

1719人浏览过

|

来源于亿速云

转载

1.对象的比较

两个对象要进行比较之前,我们首先需要确定依据什么来进行比较,对象中的成员变量那么多,直接比较是无法比较的

1.1 Comparable

是接口的参数,里面填要比较的对象的类型

此接口里面只有一个compareTo抽象方法,结构如下:

Java抽象类与接口怎么定义使用

在类中实现此接口后就可以进行类和类之间的大小的比较

立即学习Java免费学习笔记(深入)”;

1.2 Comparator

这个接口中有一个抽象方法compare,同样是用来实现对象之间比较大小,方法的结构如下:

Java抽象类与接口怎么定义使用

Java抽象类与接口怎么定义使用

和Comparable接口所不同的是,Comparator接口可以作为Arrays类中sort方法的参数

Java抽象类与接口怎么定义使用

如果是元素为类的数组,使用Comparator接口可以进一步进行数组排序

2.克隆对象

2.1 Cloneable

这个接口是一个空接口,但类需要实现此接口才能被克隆,而要重写的方法则是Object类中的clone()方法

在IDEA中自动重写的clone()方法如下:

Java抽象类与接口怎么定义使用

throws以及后面的语句不是现在的重点,暂时略过

因为此方法的返回值是Object类,所以在使用的时候记得结果强制类型转换成子类 

2.2 深拷贝和浅拷贝

既然说到克隆,那就不得不提深拷贝和浅拷贝,简单说下二者的概念:

假设将A的内容拷贝到B中,然后我们修改B中的内容,如果A的内容没有改变,那么就是深拷贝,否则就是浅拷贝

需要说明的是:一个克隆方法是深拷贝还是浅拷贝和类里面的成员变量以及自己写的代码都有关系,两个不同的类使用同一个克隆方法,一个是深拷贝,另一个是浅拷贝,这种情况是存在的

现在有一个类如下:

XFUN
XFUN

小方智能包装设计平台

下载
class A implements Cloneable{
    int i;
    int j;
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    @Override
    public String toString() {
        return "{" +
                "i=" + i +
                ", j=" + j +
                '}';
    }
}

我们在main方法中将其实例化后克隆给另一个对象,看看结果:

Java抽象类与接口怎么定义使用

此时a并没有因为b的改变而改变,clone()为深拷贝

我们再将类A进行改造:

class B implements Cloneable {
    int k;
}
class A implements Cloneable{
    int i;
    int j;
    B c=new B();
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
    @Override
    public String toString() {
        return "{" +
                "i=" + i +
                ", j=" + j +
                ", c.k=" + c.k +
                '}';
    }
}

 结果如下:

Java抽象类与接口怎么定义使用

那么此时clone是深拷贝还是浅拷贝?

出现这种结果的原因要从内存上看,在类A没有进行修改之前内存如下:

Java抽象类与接口怎么定义使用

 类A修改后的内存如下:

Java抽象类与接口怎么定义使用

按照上图来看,要实现深拷贝就需要把类B的内容再克隆一份,所以我们需要对clone方法进行修改

class B implements Cloneable {
    int k;
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
class A implements Cloneable{
    int i;
    int j;
    B c=new B();
    @Override
    protected Object clone() throws CloneNotSupportedException {
        A tmp=(A)super.clone(); 
        tmp.c=(B)this.c.clone();
        return tmp;
    }
    @Override
    public String toString() {
        return "{" +
                "i=" + i +
                ", j=" + j +
                ", c.k=" + c.k +
                '}';
    }
}

Java抽象类与接口怎么定义使用

至于为什么自己画图试试 ,这里就不讲了

3.Object类

Object类中有一些常用的方法这里拿出来介绍

3.1 equals

在Object类中此方法是用来比较大小的,返回值是布尔值,底层的实现逻辑如下:

public boolean equals(Object obj) {
    return (this == obj); 
}

关于“==”,如果两边的变量是基本类型的变量,比较的是值是否相同,而如果是引用类型的变量的话,比较的则是地址是否相同

3.2 toString

输出语句System.out.println()底层调用的就是toString方法,不过如果输出的是引用类型数据默认是输出修改后的地址,所以此时需要对其进行重写,这也是上面的例子中有toString方法的原因

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

56

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

51

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

397

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

118

2026.01.21

java版本选择建议
java版本选择建议

本专题整合了java版本相关合集,阅读专题下面的文章了解更多详细内容。

3

2026.01.21

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

11

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 2.8万人学习

C# 教程
C# 教程

共94课时 | 7.3万人学习

Java 教程
Java 教程

共578课时 | 49.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号