>  기사  >  Java  >  Java 객체 복사본의 전체 복사본 및 얕은 복사본

Java 객체 복사본의 전체 복사본 및 얕은 복사본

王林
王林앞으로
2019-11-25 15:28:282527검색

Java 객체 복사본의 전체 복사본 및 얕은 복사본

1. 객체 복사를 구현하려면 Cloneable 인터페이스를 구현해야 합니다. 이 인터페이스가 구현되지 않으면 CloneNotSupportedException이 생성됩니다. 실제로 이 인터페이스에는 단일 메서드가 없으므로 이러한 유형의 인터페이스를 종종 마커 인터페이스라고 합니다.

2. Object에는 얕은 복사를 구현하는 clone() 메서드가 있습니다. 기본 데이터형의 멤버 변수의 경우 얕은 복사는 값을 직접 전송하는 것, 즉 속성 값을 새 객체에 복사하므로 기본 데이터형을 직접 얕은 복사할 수 있습니다.

Date 객체와 같은 가변 데이터 유형의 경우 Deep Copy를 구현해야 합니다. 물론 Date 클래스는 clone() 메서드 자체를 구현하지만, 예를 들어 String 클래스는 clone() 메서드를 구현하지 않습니다. String 객체는 불변 문자 시퀀스입니다. 수명 주기 동안 메모리의 문자 시퀀스를 수정할 수 있는 방법이 없습니다. 동일한 문자열을 참조하는 다른 객체의 유사한 속성에는 문제가 없습니다.

java 학습 동영상 튜토리얼: java 학습 동영상

예는 다음과 같습니다.

public class Main{
	public static void main(String[] args){
	}
}
class Employee implements Cloneable{
	private int id;
	private Date date;
	public Employee(){}
	public Employee(int id){
		this.id=id;
		this.date=new Date();
	}
	@Override
	public Employee clone() throws CloneNotSupportedException{
		Object t=super.clone();//此时的object中的拷贝只是浅拷贝
		Employee clone=(Employee)t;
		clone.date=this.data.clone();//date类实现了深拷贝,直接调用即可
		return clone;
	}
}
class Mannager extends Employee{
	private String name;
	public Mannager(){
		super();
	}
	public Mannager(String name,int id){
		super(id);
		this.name=name;
	}
	@Override
	public Mannager clone(){
		Employee t=super.clone();//先把id date属性复制
		Mannager clone=(Mannager)t;
		clone.name=t.name;//String 对象直接赋值引用
		return clone;
	}
}

자바 관련 기사 추천 더보기: java 입문 튜토리얼

위 내용은 Java 객체 복사본의 전체 복사본 및 얕은 복사본의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제