CoreJava的例子,居然严重错误

astrocn 2005-03-24 08:20:20
import java.util.*;

public class CloneList
{

public static void main(String[] args)

{
Employee original = new Employee("Eon Hou",50000);
original.setHireDay(2000,1,1);
Employee copy = (Employee)original.clone();
copy.raiseSalary(10);
copy.setHireDay(2002,1,1);
System.out.println("original=" + original);
System.out.println("copy=" + copy);

}


}

class Employee implements Cloneable
{
public Employee(String n,double s)
{
name = n;
salary=s;

}
public Object clone()
{
try
{
Employee cloned = (Employee)super.clone();
cloned.hireDay = (Date)hireDay.clone();

return hireDay;
}
catch (CloneNotSupportedException e){return null;}

}

public void setHireDay(int year,int month,int day)
{
hireDay = new GregorianCalendar(year,month-1,day).getTime();

}

public void raiseSalary(double byPresent)
{
double raise =salary*byPresent /100;
salary +=raise;
}

public String toString ()
{
return "Employee[name=" + name + ",salary=" + salary + ",gireday ="
+ hireDay + "]";

}

private String name;
private double salary;
private Date hireDay;


}


运行提示,main()严重错误。。。我晕倒
...全文
125 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
astrocn 2005-03-28
  • 打赏
  • 举报
回复
我贴出来的代码是第六版的代码,是我照着书上打的(类名我变了。。。)

angues1980贴的代码是最初的版本,2002-07-01怎么可能是最新的啊?

在声明中clone()是一个Employee类型的方法,它返回的cloned也是Employee类型
在编译的时候,Eclipse说返回的类型和Object.clone()不匹配!也就是说,它要求返回一个Object类型的对象

public Employee clone() throws CloneNotSupportedException
{
………………
return cloned;
}
wadsunglow 2005-03-24
  • 打赏
  • 举报
回复
up
angues1980 2005-03-24
  • 打赏
  • 举报
回复
地址:http://www.phptr.com/corejava 基于JDK1.5的第七版源代码
angues1980 2005-03-24
  • 打赏
  • 举报
回复
晕,粘错了,应该这个
/**
@version 1.10 2002-07-01
@author Cay Horstmann
*/

import java.util.*;

public class CloneTest
{
public static void main(String[] args)
{
try
{
Employee original = new Employee("John Q. Public", 50000);
original.setHireDay(2000, 1, 1);
Employee copy = original.clone();
copy.raiseSalary(10);
copy.setHireDay(2002, 12, 31);
System.out.println("original=" + original);
System.out.println("copy=" + copy);
}
catch (CloneNotSupportedException e)
{
e.printStackTrace();
}
}
}

class Employee implements Cloneable
{
public Employee(String n, double s)
{
name = n;
salary = s;
}

public Employee clone() throws CloneNotSupportedException
{
// call Object.clone()
Employee cloned = (Employee)super.clone();

// clone mutable fields
cloned.hireDay = (Date)hireDay.clone();

return cloned;
}

/**
Set the hire day to a given date
@param year the year of the hire day
@param month the month of the hire day
@param day the day of the hire day
*/
public void setHireDay(int year, int month, int day)
{
hireDay = new GregorianCalendar(year, month - 1, day).getTime();
}

public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
}

public String toString()
{
return "Employee[name=" + name
+ ",salary=" + salary
+ ",hireDay=" + hireDay
+ "]";
}

private String name;
private double salary;
private Date hireDay;
}
angues1980 2005-03-24
  • 打赏
  • 举报
回复
哪里的程序啊?
去网上下载最新的源代码
/**
@version 1.31 2004-02-19
@author Cay Horstmann
*/

import java.util.*;

public class CalendarTest
{
public static void main(String[] args)
{
// construct d as current date
GregorianCalendar d = new GregorianCalendar();

int today = d.get(Calendar.DAY_OF_MONTH);
int month = d.get(Calendar.MONTH);

// set d to start date of the month
d.set(Calendar.DAY_OF_MONTH, 1);

int weekday = d.get(Calendar.DAY_OF_WEEK);

// print heading
System.out.println("Sun Mon Tue Wed Thu Fri Sat");

// indent first line of calendar
for (int i = Calendar.SUNDAY; i < weekday; i++ )
System.out.print(" ");

do
{
// print day
int day = d.get(Calendar.DAY_OF_MONTH);
System.out.printf("%3d", day);

// mark current day with *
if (day == today)
System.out.print("*");
else
System.out.print(" ");

// start a new line after every Saturday
if (weekday == Calendar.SATURDAY)
System.out.println();

// advance d to the next day
d.add(Calendar.DAY_OF_MONTH, 1);
weekday = d.get(Calendar.DAY_OF_WEEK);
}
while (d.get(Calendar.MONTH) == month);
// the loop exits when d is day 1 of the next month

// print final end of line if necessary
if (weekday != Calendar.SUNDAY)
System.out.println();
}
}
kingfish 2005-03-24
  • 打赏
  • 举报
回复
晕, clone()函数里 return 错!


return cloned;

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧