class People
{
//属性 成员变量 对象属性
private String name;
private int age;
private char sex;
private String contry;
private String hairColor;
private Father f;
//拷贝构造 通过已知对象来复制得到另外一对象
People(People p)
{
this.name = p.name;
this.age = p.age;
this.sex = p.sex;
this.contry = p.contry;
this.hairColor = p.hairColor;
this.f = new Father(p.f);
}
People()
{
}
//成员方法 对象功能
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
public void setAge(int nAge)
{
int age; //方法内部声明的变量:局部变量 局部变量不能用访问控制符修饰 使用之前必须初始化
age = 0;
age++;
this.age = nAge; //允许局部变量和成员变量同名 区分方法:成员变量用this.来调用
}
public int getAge()
{
return age;
}
public void setSex(char nSex)
{
sex = nSex;
}
public char getSex()
{
return sex;
}
public void setContry(String nContry)
{
contry = nContry;
}
public String getContry()
{
return contry;
}
public void setHairColor(String nHairColor)
{
hairColor = nHairColor;
}
public String getHairColor()
{
return hairColor;
}
public void setF(Father f)
{
this.f = f;
}
public Father getF()
{
return this.f;
}
//吃
public void eat(Food food)
{
System.out.println(hairColor+"的"+contry+"吃"+food);
}
//喝
public void drink(Drink drink)
{
System.out.println(hairColor+"的"+contry+"喝"+drink);
}
//说
public void speak(Language lang)
{
System.out.println(hairColor+"的"+contry+"说"+lang);
}
}
class Father
{
private String name;
Father(String name)
{
this.name = name;
}
Father(Father f)
{
this.name = f.name;
}
public void setName(String name)
{
this.name = name;
}
public String toString()
{
return "父亲名字:"+name;
}
};
class Food
{
private String type;
public void setType(String type)
{
this.type = type;
}
public String getType()
{
return this.type;
}
public String toString()
{
return type;
}
};
class Drink
{
private String type;
public void setType(String type)
{
this.type = type;
}
public String getType()
{
return this.type;
}
public String toString()
{
return type;
}
};
class Language
{
private String type;
Language(String type)
{
this.type = type;
}
public String getType()
{
return this.type;
}
public String toString()
{
return type;
}
};
class PeopleTest
{
public static void main(String[] args)
{
// People p1 = new People();
// p1.setName("张三");
// p1.setAge(23);
//
// People p2 = new People();
// p2.setAge(50);
//
// System.out.println(p1.getAge());
People p1 = new People();
People p2 = new People();
p1.setHairColor("黄头发");
p2.setHairColor("黑头发");
p1.setContry("葡萄牙人");
p2.setContry("朝鲜人");
Food sandWitch = new Food();
sandWitch.setType("三明治");
p1.eat(sandWitch);
//p1.drink();
//p1.speak();
Drink d = new Drink();
d.setType("可乐");
p2.drink(d);
Language chinese = new Language("汉语");
p2.speak(chinese);
Father f = new Father("乔丹");
p1.setF(f);
People p = new People(p1);
p.setContry("中国人");
System.out.println(p1.getContry());
Father ff = p.getF();
ff.setName("拉塞尔");
System.out.println(p.getF());
System.out.println(p1.getF());
}
}
分享到:
相关推荐
这个库采用了递归的方式来处理深拷贝,递归是一种自上而下解决问题的方法,当遇到复杂的数据结构,如嵌套的对象或数组时,递归可以有效地一层层地复制所有层次的数据。 在支持父子元素循环引用的情况下,这个库解决...
本文将深入探讨如何在Visual C++ 6.0环境下使用API函数实现文件夹的深层次拷贝,即递归拷贝。递归拷贝是一种典型的算法,它通过自我调用来处理具有层级结构的数据,例如目录树。 首先,我们要理解API函数在Windows...
浅拷贝只拷贝一层,更深层次的对象级别的只会拷贝引用(地址)。在 JavaScript 中,数组和对象的浅拷贝可以通过多种方法实现,以下是一些常见的浅拷贝方法: 1. 使用 slice 方法:`var arr1 = [1, 2]; var arr2 = ...
浅拷贝仅复制对象的表面层次,如果对象中包含其他对象的引用,那么这些引用在新对象中依然指向原来的对象。案例2展示了浅拷贝的例子,`o2`是对`o1`的浅拷贝,当修改`o2.x`时,`o1`的`x`属性也随之改变,因为它们...
浅拷贝仅拷贝第一层级的对象并共用内部层次的引用,而深拷贝则将所有层次的内容都完整地复制下来。通过示例代码展示了使用 Object.assign 方法实现浅拷贝,以及自定义递归函数 deepClone 来完成深层嵌套对象结构的...
这意味着,如果原始对象中的某个属性是一个复杂的数据结构,如数组或自定义类型,深度拷贝会递归地复制这些结构的所有层次,创建一个完全独立的新副本。这样,对新对象的修改不会影响到原始对象。 在C#中,有两种...
总结来说,浅拷贝只复制一层对象,而深拷贝会递归复制所有层次的对象,确保新对象与原对象完全独立。在处理包含复杂数据结构的程序时,理解这两种拷贝的区别对于避免意外的数据修改和保持数据一致性至关重要。在需要...
深拷贝,也叫完全拷贝,会递归复制对象的所有层次,确保新旧对象之间没有关联。这样,对新对象的修改不会影响到原始对象。实现深拷贝的方法有多种,但每种都有其局限性: 1. JSON.parse() 和 JSON.stringify():这...
深拷贝则是将对象的所有层次都复制一份新的,包括所有嵌套的对象和数组。这样,即使原对象改变,拷贝后的对象也不会受到影响。例如: ```javascript var student = deepClone(person); student.friends.push('...
此外,如果类层次结构复杂,实现起来会更加困难。 在实际应用中,我们还可以考虑使用序列化和反序列化的方式实现深度拷贝,或者使用第三方库如Apache Commons Lang的`DeepClone`方法,它们提供了更简便的解决方案。...
浅拷贝仅复制对象或数组的表面层次,即第一层属性。如果对象或数组包含嵌套的对象或数组,浅拷贝只会复制引用,而不是创建新的副本。而深拷贝则会递归地复制整个对象或数组及其所有嵌套的属性和子对象,确保原始数据...
在Java中,实现深拷贝是一种常见的需求,特别是在对象之间存在多层次关系的情况下。深拷贝可以帮助我们在对象之间保持独立性,并避免了对象之间的耦合关系。在本文中,我们将介绍Java中实现深拷贝的两种方式:clone...
在JavaScript中,深拷贝和浅拷贝是两种常见的数据复制方法。它们之间的区别和应用场景是编程中的重要知识点。本文将深入探讨JavaScript中的深拷贝,包括它的概念、实现方式以及适用场景。 **深拷贝的概念** 深拷贝...
这意味着无论对象的层次有多深,每个对象都会被独立复制一份。 #### 4. 示例代码 下面通过具体的示例来展示这两种拷贝的区别: ```python import copy # 浅拷贝 l1 = [1, 2, [3, 4]] l2 = copy.copy(l1) l2[2][0...
这意味着即使是最深层次的嵌套对象也会被独立复制。 ```python deep_copy = copy.deepcopy(original) original[0][0] = 100 print(deep_copy) # 输出: [[1, 2, 3], [4, 5, 6]] ``` #### 五、结论 - **深浅拷贝都是...
Teleport Ultra是一款强大的网站抓取工具,它可以深入抓取网站的多层次链接,不仅获取首页,还能遍历内链,将所有相关资源一网打尽。该工具支持HTTP和HTTPS协议,确保了对加密网站的兼容性。通过其内置的登录功能,...
这在处理结构化的帮助文档或多层次的网站时尤其有用,确保用户能获取完整的网站信息。 结合“网站拷贝”这一标签,我们可以推断这个工具的核心功能就是网站的完整复制。网站拷贝通常涉及以下技术点: 1. **URL解析...
深拷贝会完整地复制一个对象,包括对象所包含的所有子对象以及更深层次的对象。深拷贝之后,两个对象之间没有任何关联,完全独立。对任一对象的修改都不会影响到另一个对象。 深浅拷贝的问题经常在我们不希望原始...
这个过程常用于数据迁移、对象克隆或者深度复制场景,特别是当对象层次结构复杂,手动编写复制代码工作量大时。 首先,我们需要获取源对象和目标对象的类类型,这可以通过`Class<?>`的`forName()`或`getClass()`...
当对象层次过深时,递归调用可能导致JavaScript引擎栈溢出(爆栈)。为了解决这个问题,我们可以使用一个缓存数组来存储已经拷贝过的对象,如果遇到已存在于缓存中的对象,就直接返回其副本,避免无限递归。 四、...