Java面向对象编程进阶(四)

在这里插入图片描述


Java面向对象编程进阶(四)

  • 一、equals()方法的使用
  • 二、toString()方法的使用
  • 三、复习

一、equals()方法的使用

适用性:任何引用数据都可以使用。

自定义的类在没有重写Object中equals()方法的情况下,调用的就是Object类中声明的equals(),比较两个对象的引用地址是否相同。(或比较两个对象是否指向了堆空间中的同一个对象实体)。

开发中使用说明:

实际开发中,针对于自定义的类,常常会判断两个对象是否equals(),而此时主要是判断两个对象的属性值是否相等。所以:我们要重写Object类的equals()方法。

package exec.equals;/*** package:exec.equals** @Author jimmy-yan* @Create 2024/10/24 20:48*/
public class UserTest {public static void main(String[] args) {User u1=new User("tom",12);User u2=new User("tom",12);System.out.println(u1.equals(u2));   //false  判断地址值是否相等}
}class User {String name;int age;public User() {}public User(String name, int age) {this.name = name;this.age = age;}
}

面试题:区分==和equals()的区别
==:运算符

使用范围:基本数据类型、引用数据类型
基本数据类型:判断数据值是否相等
引用数据类型:比较两个引用变量的地址值是否相等

equals():方法

使用范围:引用数据类型
具体使用:对于类来说重写equals()和不写equals()的区别

package exec.equals;import java.util.Objects;/*** package:exec.equals** @Author jimmy-yan* @Create 2024/10/24 20:48*/
public class UserTest {public static void main(String[] args) {User u1=new User("tom",12);User u2=new User("tom",12);System.out.println(u1.equals(u2));   //true}
}class User {String name;int age;public User() {}public User(String name, int age) {this.name = name;this.age = age;}//重写equals方法@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;User user = (User) o;return age == user.age && Objects.equals(name, user.name);}}

二、toString()方法的使用

平时我们在调用System.out.println()打印对象引用变量时,其实就调用了对象的toString()

自定义的类,在没有重写Object类的toString()的情况下,默认返回的是当前对象的地址值。
像String、File、Date或包装类等Object的子类,它们都重写了Object类的toString(),在调用toString()时,返回当前对象的实体内容。

习惯上,开发中对于自定义的类在调用toString()时,也希望显示其对象的实体内容,而非地址值。这时候,就需要重写0bject类中的toString()

package toString;/*** package:toString** @Author jimmy-yan* @Create 2024/10/25 14:01*/
public class toStringTest {public static void main(String[] args) {User u1 = new User("tom",12);System.out.println(u1.toString());     //todo toString.User@6a5fc7f7System.out.println(u1);               //todo toString.User@6a5fc7f7}}class User{String name;int age;public User() {}public User(String name, int age) {this.name = name;this.age = age;}
}

重写toString()方法

package toString;/*** package:toString** @Author jimmy-yan* @Create 2024/10/25 14:01*/
public class toStringTest {public static void main(String[] args) {User u1 = new User("tom", 12);
//        System.out.println(u1.toString());     //todo toString.User@6a5fc7f7
//        System.out.println(u1);               //todo toString.User@6a5fc7f7System.out.println(u1.toString());     //todo User{name='tom', age=12}System.out.println(u1);                //todo User{name='tom', age=12}}}class User {String name;int age;public User() {}public User(String name, int age) {this.name = name;this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}
}

案例:定义两个类,父类Geometric0bject代表几何形状,子类Circle代表圆形。
写一个测试类,创建两个Circle对象,判断其颜色是否相等;利用equals方法判断其半径是否相等;利用toString()方法输出其半径。

package toString;/*** package:toString** @Author jimmy-yan* @Create 2024/10/25 14:29*/
public class GeometricObject {protected String color;protected double weight;public GeometricObject() {this.color="white";this.weight=1.0;}public GeometricObject(String color, double weight) {this.color = color;this.weight = weight;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public double getWeight() {return weight;}public void setWeight(double weight) {this.weight = weight;}
}
package toString;/*** package:toString** @Author jimmy-yan* @Create 2024/10/25 14:32*/
public class Circle extends GeometricObject {private double radius;public Circle(){
//        color="white";
//        weight=1.0;radius=1.0;}public Circle(double radius) {
//        color="white";
//        weight=1.0;this.radius = radius;}public Circle(String color, double weight, double radius) {super(color, weight);this.radius = radius;}public double getRadius() {return radius;}public void setRadius(double radius) {this.radius = radius;}//求圆的面积public double findArea(){return 3.14*radius*radius;}//重写equals@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Circle circle = (Circle) o;return Double.compare(circle.radius, radius) == 0;}@Overridepublic String toString() {return "Circle{" +"radius=" + radius +'}';}
}
package toString;/*** package:toString** @Author jimmy-yan* @Create 2024/10/25 14:42*/
public class CircleTest {public static void main(String[] args) {Circle c1 = new Circle(2.3);Circle c2 = new Circle("red",2.0,2.4);System.out.println(c1.getColor().equals(c2.getColor()));  //falseSystem.out.println(c1.equals(c2));   //falseSystem.out.println(c1);   //Circle{radius=2.3}}
}

三、复习

this关键字的使用

this可以调用属性、方法;构造器
this调用属性或者方法时,理解为当前对象或者正在创建的对象

public void setName(String name){ //当属性名和形参名相同时,必须使用this来区分this.name=name;
}public Person(String name){this.name=name
}

this(形参列表)的方式,表示调用当前类中其他的重载的构造器。

继承性:
继承性的好处:

减少了代码的冗余,提高了复用性;
提高了拓展性

java中继承性的特点:

单继承性,一个类只能继承一个父类
支持多层继承

基础:class A extend B{}
理解:子类就获取了父类中声明的全部的属性和方法。可能受封装性的影响不能直接调用。

方法的重写(override和overwrite)
方法的重载和重写的区别

重载:两同一不同
重写:

前提:类的继承关系
子类对父类中同名参数方法的覆盖、覆写。

super的使用

super可以调用的结构:属性、方法、构造器
super:父类的
super调用属性和方法

a、如果子父类中出现了同名的属性,此时使用super.的方式,表明调用的是父类中声明的属性(有权限的情况)。
b、子类重写了父类的方法,如果子类的任何一个方法中需要调用父类被重写的方法时,需要使用super.

super调用构造器:

在子类的构造器中,首行要么使用了”this(形参列表)“,要么使用了”super(形参列表)“。

子类对象实例化过程(熟悉)
从结果说:体现为继承性
从过程说:子类调用构造器创建对象时,一定会直接或间接的调用父类的构造器
以及父类的父类的构造器…,直到调用到Object()的构造器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/459474.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker搭建基于Nextcloud的个人云盘/私有云盘/个人相册/家庭NAS

安装配置Docker 官方安装文档:https://docs.docker.com/engine/install/ Docker常用命令:https://blog.csdn.net/qq_43003203/article/details/139532097?spm1001.2014.3001.5502 Docker镜像仓库配置方法和国内常用镜像仓库地址: 输入&a…

k8s 二进制部署安装(三)

目录 部署Calico Calico 工作原理 部署Calico 部署CoreDNS 负载均衡部署 部署dashboard 部署Calico 安装步骤来到 CNI 网络组件 ,在(二)中我们安装了flannel,现在我们要尝试安装另一网络组件Calico calico 不使用隧道或NAT…

Spring Task—定时任务

Spring Task 是 Spring 提供的一种轻量级定时任务调度功能,内置在 Spring 框架中。与 Quartz 等重量级调度框架相比,Spring Task 使用简便,无需额外依赖,适合在简单的调度任务场景中使用。通过注解配置方式,开发者可以…

docker 安装 PostgreSQL

参考链接 https://hub.docker.com/_/postgres 安装 # 后台运行,镜像名称为 postgres # --name postgres 容器名称为 postgres # POSTGRES_PASSWORD 超级用户的密码,超级用户名默认为:postgres,可以使用 POSTGRES_USER 环境变量设…

Flink(一)

目录 架构处理有界与无界数据部署应用到任意地方运行任意规模应用利用内存性能 流应用流处理应用的基本组件流状态时间 应用场景事件驱动应用事件驱动应用的优势Flink如何支持事件驱动应用? 典型的事件驱动示例 数据分析应用流式分析应用的优势?Flink 如…

【数据结构和算法】三、动态规划原理讲解与实战演练

目录 1、什么是动态规划? 2、动态规划实战演练 2.1 力扣题之爬楼梯问题 (1)解题思路1: (2)解题思路2: (3)动态规划(DP):解题思路 (4&#x…

中天控股智慧园区项目

— 项目概况 — 项目名称:智慧园区项目 项目地点:云南省 合作单位:中天控股集团有限公司(简称“中天控股”) 汇匠源与中天控股集团有限公司(简称“中天控股”)曾在智慧园区项目展开合作&a…

前端自学资料(笔记八股)分享—CSS(4)

更多详情:爱米的前端小笔记(csdn~xitujuejin~zhiHu~Baidu~小红shu)同步更新,等你来看!都是利用下班时间整理的,整理不易,大家多多👍💛➕🤔哦!你们…

MySQL查看某个数据库里面每张表的字符集和字符排序集

字符集: 定义了MySQL中数据在硬盘上的存储方式。例如 utfmb3、utfmb4等。每个不同的字符集都拥有一个默认的字符排序集。 字符排序集: 定义了在数据库中进行字符串比较和排序的方式。 (1)比较字符串:确定两个字符串是否…

Git相关介绍

基本概念 关注(watch) 关注项目,当项目更新可以接收到通知 事物卡片(Issue) 发现代码BUG,但是目前没有成型代码,需要讨论时用 Git工作区域 工作区 添加、编辑、修改文件等动作 暂存区 …

坚持使用kimi搭建小程序2小时(04天/05天)

运用好kimi智能助手里面的存储小程序,{缺乏一个相对稳定的反馈体系,自己所挑选的稳定反馈体系就是编程!} 开源竞争: 当你无法彻底掌握一门技术的时候,就开源这门技术,培养出更多的技术依赖,让更多人完善你…

VMware虚拟机启动报错“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”

之前正常使用的VMware虚拟机,突然启动时报错:此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态,详细信息如下截图所示。   百度错误信息,根据参考文献1中的方案,进入BIOS设置启动VT-x。进入BIOS后&…

spyglass关于cdc检测的一处bug

最近在使用22版spyglass的cdc检测功能,发现struct_check的cdc检测实际时存在一些bug的。 构造如下电路,当qualifier和destination信号汇聚时,如果des信号完全将qualifier gate住,sg仍然会报ac_sync。当然此问题可以通过后续funct…

基础知识-因果分析-daythree-独立性检验-贝叶斯公式及应用

根据概率乘法公式有P(AB)P(B|A)P(A)变形为除法形式,则有 更一般地,假设事件的集合B1,B2,…,Bn构成样本空间的一个划分,则根据全概率公式有 将式(2.14)中的B替换为Bi,则有 再代入P(A)的全概率计算…

Openlayers高级交互(8/20):选取feature,平移feature

本示例介绍如何在vue+openlayers中使用Translate,选取feature,平移feature。选择的时候需要按住shift。Translate 功能通常是指在地图上平移某个矢量对象的位置。在 OpenLayers 中,可以通过修改矢量对象的几何位置来实现这一功能。 效果图 配置方式 1)查看基础设置:http…

即插即用篇 | YOLOv8 引入 空间自适应特征调制模块 SAFM

代码地址: https://github.com/sunny2109/SAFMN 论文地址:https://arxiv.org/pdf/2302.13800 虽然已经提出了许多图像超分辨率的解决方案,但它们通常与许多计算和内存限制的低功耗设备不兼容。本文通过提出一个简单而有效的深度网络来高效地解决图像超分辨率问题。具体来说,…

【Oracle实验】字段为空的,无法通过排除判断

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.场景描述 需求:查询不是某个机构的数据。 同事SQL:where substr(bank_code,1,9) not in(014009001); 看SQL似乎没什么问题,分析…

练习LabVIEW第二十一题

学习目标: 刚学了LabVIEW,在网上找了些题,练习一下LabVIEW,有不对不好不足的地方欢迎指正! 第二十一题: 用一个chart(波形图表)显示一个随机数,用前面板控件改变chart(波形图表)的大小和位置…

CSS.导入方式

1.内部样式 在head的style里面定义如 <style>p1{color: brown;}</style> 2.内联样式 直接在标签的里面定义如 <p2 style"color: blue;">这是用了内联样式&#xff0c;蓝色</p2><br> 3.外部样式表 在css文件夹里面构建一个css文件…

Python | Leetcode Python题解之第515题在每个树行中找最大值

题目&#xff1a; 题解&#xff1a; class Solution:def largestValues(self, root: Optional[TreeNode]) -> List[int]:if root is None:return []ans []q [root]while q:maxVal -inftmp qq []for node in tmp:maxVal max(maxVal, node.val)if node.left:q.append(n…