Java核心技术卷 接口
clone方法具体的使用及一些更深的理解 暂时还不能完完全全领会 待再次深入学习
package interfaces.clone;
// instanceOf equals 的区别
public class CloneT {
public static void main(String[] args){
Employee original = new Employee("john" , 500000);
original.setHireDay(2000,2,5);
try {
Employee copy = original.clone();
copy.riaseSalary(5);
copy.setHireDay(2002,2,6);
System.out.println("original=" + original);
System.out.println("copy=" + copy);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
package interfaces.clone;
import java.time.LocalDate;
import java.util.Date;
import java.util.GregorianCalendar;
public class Employee implements Cloneable{
private String name;
private double salary;
private Date hireDay; // Date类子类对象是可变的 而localdate则不是 所以这里采用Date类 便于展示
public Employee(String name , double salary){
this.name = name;
this.salary = salary;
hireDay = new Date();
}
public Employee clone() throws CloneNotSupportedException {
Employee cloned = (Employee) super.clone();
cloned.hireDay = (Date) hireDay.clone();
return cloned;
}
public void setHireDay(int year , int month , int day){
Date newHireDay = new GregorianCalendar(year,month - 1 , day).getTime();
hireDay.setTime(newHireDay.getTime());
}
//更改器方法
public void riaseSalary(double b){
double raise = salary * b/100;
salary += raise;
}
public String toString(){
return "Employee[name=" + name +",salary=" + salary + ",hireDay=" + hireDay +"]";
}
}
instanceOf
instanceof操作符用于判断一个引用类型所引用的对象是否是一个类的实例
equals
的区别
clone CSDN查阅 明天更 学习时间得调整 效率太低了
——————————待更新
为什么要使用clone()方法
克隆的对象可能包含了一些属性,当创建了一个新的对象时,对应的属性没有值,所以要对这个对象赋值,clone()方法便用于此。
clone包含了浅克隆和深克隆
浅克隆是指拷贝对象时仅仅拷贝了对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象
深克隆不仅拷贝对象本身,而且拷贝了对象包含的引用指向的所有对象。
浅克隆
public Employee clone() throws CloneNotSupportedException {
return super.clone();
}
深克隆
public Employee clone() throws CloneNotSupportedException {
Employee cloned = (Employee) super.clone();
cloned.hireDay = (Date) hireDay.clone(); 这里采用Date类的原因是其变量是可变的 而LoacalDate则是final static 。
return cloned;
}