//Example:
//1.Clock类:
public class Clock {
private int hour;
private int minute;
private int second;
public Clock(){
setTime(0,0,0);
}
public Clock(int h,int m,int s){
setTime(h,m,s);
}
/* 拷贝构造函数 */
public Clock(Clock clock){ ///对象做参数
this.hour=clock.hour;
this.minute=clock.minute;
this.second=clock.second;
}
public int getHour() {
return hour;
}
public int getMinute() {
return minute;
}
public int getSecond() {
return second;
}
public void setTime(int h,int m,int s){
if(h>=0 && h<24)
this.hour=h;
else
this.hour=0;
if(m>=0 && m<60)
this.minute=m;
else
this.minute=0;
if(s>=0 && s<60)
this.second=s;
else
this.second=0;
}
public void printTime(){
if(this.hour<10)
System.out.print("0");
System.out.print(this.hour+":");
if(this.minute<10)
System.out.print("0");
System.out.print(this.minute+":");
if(this.second<10)
System.out.print("0");
System.out.println(this.second);
}
}
//2.main函数:
public class Program {
public static void main(String[] args) {
Clock c1=new Clock(6,43,23);
Clock c2=new Clock(c1);//调用拷贝构造函数
c1.printTime();
c2.printTime();
}
}
//3.运行结果:
06:43:23
06:43:23
----------------------------------------------------------------------------------
构造函数只能进行浅copy,就是只能复制简单类型如int,float数据到另一副本。
如果对象中包含了对象等复杂类型,浅拷贝对象其实是对象的引用,而不是重新生成一个新副本。这时,如果对一个实例的内部类类型修改,其他实例的内部类类型也会被修改。这时就需要copy构造函数来进行深复制(也就是使对象中包含的类等复杂类型使用值赋值,而不是引用赋值)
----------------------------------------------------------------------------------
构造方法是一种特殊的方法,它是一个与类同名且没有返回值类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。
拷贝构造方法就是用一个已经实例化的对象来new另一个对象
给个例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public
class
Test {
private
int
hour;
private
int
minute;
private
int
second;
// 构造方法
public
Test() {
}
// 拷贝构造方法
public
Test(Test t) {
super
();
this
.hour = t.hour;
this
.minute = t.minute;
this
.second = t.second;
}
}
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。