Maison > Java > Javacommencer > Copie profonde et copie superficielle de la copie d'objet Java

Copie profonde et copie superficielle de la copie d'objet Java

王林
Libérer: 2019-11-25 15:28:28
avant
2606 Les gens l'ont consulté

Copie profonde et copie superficielle de la copie d'objet Java

1. Pour implémenter la copie d'objet, une interface Cloneable doit être implémentée. Si cette interface n'est pas implémentée, une CloneNotSupportedException sera générée. En fait, cette interface n’a pas une seule méthode, c’est pourquoi ce type d’interface est souvent appelé interface marqueur.

2. Il existe une méthode clone() dans Object qui implémente une copie superficielle. Pour les variables membres des types de données de base, la copie superficielle transférera directement la valeur, c'est-à-dire copiera la valeur de l'attribut dans le nouvel objet, afin que les types de données de base puissent être copiés directement.

Pour les types de données variables, tels que les objets Date, des copies complètes doivent être implémentées. Bien entendu, la classe Date elle-même implémente la méthode clone(), mais la classe String, par exemple, n'implémente pas la méthode clone(. ) car les objets String ne peuvent pas. Il n'y a aucun moyen de changer la séquence de caractères dans son cycle de vie pour modifier la séquence de caractères dans la mémoire. Il n'y a aucun problème si des attributs similaires dans différents objets font référence à la même chaîne.

Tutoriel vidéo d'apprentissage Java : Vidéo d'apprentissage Java

L'exemple est le suivant :

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;
	}
}
Copier après la connexion

Autres articles recommandés sur Java : Introduction à Java tutoriel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal