Day15 面向对象进阶——接Day14

Day15 面向对象进阶——接Day14

文章目录

  • Day15 面向对象进阶——接Day14
    • 一、访问修饰符
    • 二、Object
    • 三、深入String的equals()方法
    • 四、final

一、访问修饰符

1、含义:修饰类、方法、属性,定义使用的范围

2、经验:
2.1.属性一般使用private修饰,因为封装
2.2.属性或者方法如果需要被子类使用,一般使用protected修饰
2.3.方法如果不需要被外界使用,一般使用private修饰

2.4.方法一般使用public修饰

注意:1.修饰类只能使用public和默认的访问权限
2.修饰方法和属性可以使用所有的访问权限

访问修饰符本类本包其他包子类其他包
privateOK
默认的OKOK
protectedOKOKOK
publicOkOKOKOk

二、Object

​ 1、含义:基类也叫做超类,Object是所有类的祖先类

​ 2、注意:如果一个类没有明确继承的父类,默认继承Object

​ 3、Object方法的使用

​ 3.1. equals:比较两个对象内存地址是否相同

​ 3.2. hashCode:获取对象的hash值

​ 3.3. getClass:获取类的字节码文件对象

​ 3.4. toString:获取对象的字符串表示

​ 4、标杆作用:Object作为所有类的父类,定义了几个方法,方便子类去重写

​ 4.1. equals的标杆作用:比较两个对象是否相同,不同的对象比较规则不一样,所以子类重写即可

​ 4.2. toString的标杆作用:每个子类都有不同的属性,重写toString直接打印该对象中所有的属性,方便观察数据

​ 5、举例:

class Person {private String name;private int age;public Person(String name, int age) {this.name = name;this.age = age;
}@Override
public String toString() {return "Person{name='" + name + "', age=" + age + "}";
}@Override
public boolean equals(Object obj) {if (this == obj) {return true;}if (obj == null || getClass() != obj.getClass()) {return false;}Person person = (Person) obj;return age == person.age && name.equals(person.name);
}@Override
public int hashCode() {return Objects.hash(name, age);
}}public class Main {public static void main(String[] args) {Person person1 = new Person("Alice", 30);Person person2 = new Person("Bob", 25);// 使用toString方法System.out.println(person1.toString());// 使用equals方法比较两个对象System.out.println("Are person1 and person2 equal? " + person1.equals(person2));// 使用hashCode方法获取对象的哈希码System.out.println("HashCode of person1: " + person1.hashCode());System.out.println("HashCode of person2: " + person2.hashCode());
}}

分析:在这个示例中,Person类重写了toStringequalshashCode方法,这些方法都是从Object类继承而来的。在Main类中,我们创建了两个Person对象,并演示了如何使用toString方法打印对象的字符串表示,使用equals方法比较两个对象是否相等,以及使用hashCode方法获取对象的哈希码。

通过重写Object类的方法,我们可以根据自定义类的需求来定制这些方法的行为,从而更好地管理对象的字符串表示、相等性比较和哈希码计算。

三、深入String的equals()方法

​ 1、 含义:在Java中,String类重写了equals()方法,用于比较两个字符串对象的内容是否相等。

​ 2、 面试题:String是如何比较两个字符串是否相同的
​ 2.1.比较两个字符串的地址是否相同
​ 2.2.比较两个字符串的字符个数
​ 2.3.循环比较字符的Unicode码

public class Test01 {public static void main(String[] args) {String str1 = new String("abc");String str2 = new String("abc");System.out.println(str1 == str2);//falseSystem.out.println(str1.equals(str2));//trueSystem.out.println(str1);System.out.println(str2);System.out.println("-------------------------------");MyString m1 = new MyString("abc");MyString m2 = new MyString("abc");System.out.println(m1 == m2);//falseSystem.out.println(m1.equals(m2));//true//注意:打印对象,默认调用toString()System.out.println(m1);System.out.println(m2);}
}
public class MyString {private char[] value;public MyString(String original) {//"abc"//['a','b','c']value = original.toCharArray();//将字符串转换为字符数组}@Overridepublic boolean equals(Object obj) {if(this == obj){return true;}MyString my = (MyString) obj;char[] v1 = this.value;char[] v2 = my.value;//比较字符长度if(v1.length != v2.length){return false;}for (int i = 0; i < v1.length; i++) {//比较字符的Unicode码是否相同if(v1[i] != v2[i]){return false;}}return true;}@Overridepublic String toString() {return String.valueOf(value);//将字符数组转为字符串}
}

四、final

1、含义:最终

2、作用:

​ 2.1. 修饰类:该类不能被继承

​ 2.2. 修饰方法:该方法不能被重写

​ 2.3. 修饰变量:变成常量,不能重新赋值

注意:常量的命名规则:全大写,单词之间用下划线隔开

常量的生命周期:存在常量池中,直到项目结束才会被销毁

3、经验:
如果不想让该类有子类(不想该类有扩展),就是用final修饰
final和static一般一起修饰属性,该属性变成静态常量
Object的equals内存图Object的equals内存图

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

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

相关文章

Linux第77步_处理Linux并发的相关函数

了解linux中的“原子整形数据”操作、“原子位数据”操作、自旋锁、读写锁、顺序锁、信号量和互斥体&#xff0c;以及相关函数。 并发就是多个“用户”同时访问同一个共享资源。如&#xff1a;多个线程同时要求读写同一个EEPROM芯片&#xff0c;这个EEPROM就是共享资源&#x…

面试六--TCP粘包问题

1.流式传输协议 流式传输协议&#xff08;Streaming Protocol&#xff09;是一种用于在网络上传输数据的通信协议&#xff0c;它允许数据以连续的流的形式进行传输&#xff0c;而不是一次性发送完整的数据包。流式传输协议即协议的内容是像流水一样的字节流&#xff0c;内容与内…

【Flutter】报错Target of URI doesn‘t exist ‘package:flutter/material.dart‘

运行别人项目 包无法导入报错&#xff1a;Target of URI doesn’t exist ‘package:flutter/material.dart’ 解决方法 flutter packages get成功 不会报错

BIT-1-深度剖析数据在内存中的存储(C语言进阶)

本章重点 数据类型详细介绍 整形在内存中的存储&#xff1a;原码、反码、补码大小端字节序介绍及判断浮点型在内存中的存储解析 1. 数据类型介绍 前面我们已经学习了基本的内置类型&#xff1a; char //字符数据类型 short //短整型 int //整形 long //长整型…

如何在Windows系统安装Node.js环境并制作html页面发布公网远程访问?

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

代码随想录算法训练营第八天|344. 反转字符串

344. 反转字符串 已解答 简单 相关标签 相关企业 提示 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#…

供应IMX290LQR-C芯片现货

长期供应各品牌芯片现货&#xff0c;SONY索尼SONY索尼CMOS/CCD芯片全系列全新现货优势出&#xff1a; IMX225LQR-C IMX415-AAQR-C IMX290LQR-C imx273llr-C IMX397CLN-C IMX637-AAMJ-C IMX647-AAMJ-C IMX991-A***-C IMX991-AABJ-C IMX287LLR-C IMX287LQR-C IMX297L…

缓存更新策略(旁路更新策略)

文章目录 前言旁路更新策略读操作写操作 总结 前言 Redis &#xff0c;是基于内存的数据库&#xff0c;我们常将其做为缓存&#xff0c;在数据访问时&#xff0c;达到更高的性能。 那么该如何使用 Redis 做为缓存呢&#xff1f;本篇文章介绍缓存的更新策略——Cache-Aside&am…

创新指南 | 工业软件企业如何采用 C端线上推广 与免费试用策略快速扩展工程师用户群

在工业4.0的浪潮下&#xff0c;工业软件企业正站在数字化转型的风口浪尖&#xff0c;面对传统B端市场的增长瓶颈&#xff0c;企业急需找寻新的增长动力。在此背景下&#xff0c;转向C端市场&#xff0c;利用线上渠道直接触达终端工程师用户&#xff0c;通过免费试用模式快速扩展…

【数学建模】熵权法 Python代码

熵权法是一种客观的赋权方法&#xff0c;它可以靠数据本身得出权重。 依据的原理&#xff1a;指标的变异程度越小&#xff0c;所反映的信息量也越少&#xff0c;其对应的权值也应该越低。 import numpy as np#自定义对数函数mylog&#xff0c;用于处理输入数组中的0元素 def m…

义乌购关键字搜索API接口技术详解与代码示例

义乌购关键字搜索API接口技术详解与代码示例 在电子商务蓬勃发展的今天&#xff0c;义乌购作为国内知名的批发市场平台&#xff0c;为广大商家和消费者提供了丰富的商品资源。为了方便开发者快速接入义乌购平台&#xff0c;实现商品信息的搜索与获取&#xff0c;义乌购开放了关…

数码管的静态显示(二)

1.原理 要按照上图的顺序传递位选和段选的数据。 因为q0是最高位&#xff0c;共阳极数码管结构是dp....a&#xff0c;所以应该先传入低位a&#xff0c;而a在上图中的8段2进制编码中是seg[7]&#xff0c;所以段选信号的顺序是seg[0],...seg[7]。 因为输出信号是两个时钟&#x…