常用API
(一)Object类
任何类直接或间接继承Object类 Object类是所有类的超类
因此所有类可继承或重写Object中方法
常见方法:
-
protected Object clone()
返回和调用对象完全相同的一个新对象
默认protected修饰 在子类外使用需重写
IDEA中输入"clone"快捷重写toString()方法
使用时需实现Cloneable接口 -
boolean equals(Object obj )
判断参数与调用对象是否相等 默认判断条件是对象的地址是否相同
IDEA中输入"eq"快捷重写toString()方法 -
String toString()
返回调用对象的字符串形式
IDEA中输入"toS"快捷重写toString()方法
注
接口如果无内容,称这类接口为标记接口
alt + enter 抛出克隆异常
浅克隆&&深克隆
浅克隆中引用类型拷贝的只是地址,不会创建新的引用类型的对象
深克隆中除字符串这种引用类型数据外会创建引用数据类型的新对象
主类
package com.of.day9_API;
import java.util.Objects;
public class Student extends Object implements Cloneable{
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public Student(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
// 地址直接一样
if (this == o) return true;
// 比较者类型不是有关系的类且非空
if (!(o instanceof Student)) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
测试类
package com.of.day9_API;
public class Test {
public static void main(String[] args) throws CloneNotSupportedException {
Student s1 = new Student("缺省",11);
// 重写的clone()方法
// 重写的toString()方法
System.out.println(s1.toString());
String i = null;
// 重写的equals()方法
System.out.println(s1.equals(i));
// 重写的clone()方法
Student s2 = (Student) s1.clone();
System.out.println(s2.getAge());
System.out.println(s2.getName());
}
}