工厂网站怎么做,河南郑州房价,大连开发区人才网,东莞手机手机端网站建设Day15 面向对象进阶——接Day14 文章目录 Day15 面向对象进阶——接Day14一、访问修饰符二、Object三、深入String的equals()方法四、final 一、访问修饰符
1、含义#xff1a;修饰类、方法、属性#xff0c;定义使用的范围
2、经验#xff1a; 2.1.属性一般使用private修…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默认的OKOKprotectedOKOKOKpublicOkOKOKOk
二、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类重写了toString、equals和hashCode方法这些方法都是从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内存图