A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ok-Prince 于 2014-3-16 08:39 编辑

今天在书上看到一代码,感觉是一个学习类的继承的一个很好的例子,就抄写了下来,没想到编译的时候居然挂了。。。求各位大神帮忙看看。
(我编译的时候编译的Test.java)
  1. import java.util.Date;
  2. public class Employee
  3. {
  4.         private String name;                        //员工姓名
  5.         private double salary;                        //员工工资
  6.         private Date birthday;                        //员工生日
  7.         public String getName()                        //获取员工姓名
  8.         {
  9.                 return name;
  10.         }
  11. }
  12.         public void setName(String name)        //设置员工姓名
  13.         {
  14.                 this.name = name;
  15.         }
  16.         public double getAalary()                //获取员工的工资
  17.         {
  18.                 return salary;
  19.         }
  20.         public void setSalary(double salary)        //设置员工的工资
  21.         {
  22.                 this salary = salary;
  23.         }
  24.         public Date getBirthday()                //获取员工的生日
  25.         {
  26.                 return birthday;
  27.         }
  28.         public void setBirthday(Date birthday)        //设置员工的生日
  29.         {
  30.                 this.birthday = birthday;
  31.         }
  32. }

  33. public class Manager extends Employee
  34. {
  35.         private double bonus;                        //经理的奖金
  36.         public double getBonus()                //获取经理的奖金
  37.         {
  38.                 return bonus;
  39.         }
  40.         public void setBonus(double bonus)
  41.         {
  42.                 this bonus = bonus;
  43.         }
  44. }
  45. import java.util.Date;                                //导入java.util.Date类
  46. public class Test
  47. {
  48.         public static void main(String[] args)
  49.         {
  50.                 Employee employee = new Employee();        //创建Employee对象并为其赋值
  51.                 employee.setName("java");
  52.                 employee.setSalary(100);
  53.                 employee.setBirthday(new Date());
  54.                 Manager manager = new Manager();        //创建Manager对象并为其赋值
  55.                 manager.setName("明日科技");
  56.                 manager.setSalary(3000);
  57.                 manager.setBirthday(new Date());
  58.                 manager.setBonus(2000);
  59.                 //输出经理和员工的属性值
  60.                 System.out.println("员工的姓名"+employee.getName());
  61.                 System.out.println("员工的工资"+employee.getSalary());
  62.                 System.out.println("员工的生日"+employee.getBirthday());
  63.                 System.out.println("经理的姓名"+manager.getName());
  64.                 System.out.println("经理的工资"+manager.getSalary());
  65.                 System.out.println("经理的生日"+manager.getBirthday());
  66.                 System.out.println("经理的奖金"+manager.getBonus());
  67.         }
  68. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

11 个回复

倒序浏览
1.错误: public void setBonus(double bonus)
        {
                this bonus = bonus;//   this.bonus = bonus;
        }
2.错误:  public void setSalary(double salary)        //设置员工的工资
        {
                this salary = salary;//this.salary = salary;
3.错误: public String getName()                        //获取员工姓名
        {
                return name;
        }
}//这个去掉

写代码你太不细心了,你也不够专研。写代码必须有锲而不舍的精神,就是有点专牛角尖的毛病才好

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
在主方法的
  1.   System.out.println("员工的工资"+employee.getSalary());
复制代码
  1. System.out.println("经理的工资"+manager.getSalary());
复制代码
在 Employee类中没有声明,之提供了
  1. public void setSalary(double salary)        //设置员工的工资
复制代码
方法没有提供get方法

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
//修改后的代码
回复 使用道具 举报
1L说的很好了,给LZ一个建议,用eclipse编写代码多用 alt+/ 能出现提示,还有set get方法用鼠标右键Source选项里面Generate Getters and Setters生成,既能节省时间,也能避免自己写名字不规范的问题
回复 使用道具 举报
LZ如果学到后面了,用MyEclipse可以参照楼上推荐的"偷懒"方法。方便省时也不易出错。
错误: 一楼、二楼基本讲到,二楼提到没有getSalary()方法,不是没有,而是你打错方法名了:
        public double getAalary()                //获取员工的工资
        {
                return salary;
        }
另外提点问题之外的建议:
1、增加类创建实例化对象时初始化赋值,例:
Employee employee = new Employee("Java",100,new Date());
当然Employee类也就要增加:
Employee(String name,double salary,Date birthday) {
                this.name = name;
                this.salary = salary;                    //这里其实多少应该增加判断语句,有问题时抛异常等;
                this.birthday = birthday;
        }             //方便简化创建多个类实例化对象时的赋值的代码;
PS: 建议复写toString()方法或增加个打印具体参数的代码,目的也是简化打印实例化对象的变量值时候的代码。

最后再啰嗦多句,就像张孝祥老师在移动计费中讲的,可以把有些东西看作整体,只不过某些对象的该数值为0罢了。
例: 在简化编码时,可以将经理的double bonus属性也添加在员工中,就跟现实区别一样,只不过普通员工的bonus值为 0 ;打印语句可以在打印方法中加入判断语句,bonus值为0,就打印不带bonus参数的println()语句,反之则打印另外一句带bonus参数的println()语句。
涉及东西讲的太多太杂了,仅供参考吧,以后LZ深入后也会慢慢领会到,O(∩_∩)O~
回复 使用道具 举报
多一点 发表于 2014-3-15 22:02
1.错误: public void setBonus(double bonus)
        {
                this bonus = bonus;//   this.b ...

嗯,谢谢了,是我粗心了,代码我已经改过了,只剩一行错误了,就是一到了import java.util.Date编译就提示Test.java:45:错误:需要class,interface或enum,因为我刚刚开始学java,import java.util.Date这句代码我还没学到,不知道是什么意思,编译出现这个问题我还真不知道应该怎么解决。。求指教。。。。
  1. import java.util.Date;
  2. public class Employee
  3. {
  4. private String name; //员工姓名
  5. private double salary; //员工工资
  6. private Date birthday; //员工生日
  7. public String getName() //获取员工姓名
  8. {
  9. return name;
  10. }

  11. public void setName(String name) //设置员工姓名
  12. {
  13. this.name = name;
  14. }
  15. public double getSalary() //获取员工的工资
  16. {
  17. return salary;
  18. }
  19. public void setSalary(double salary) //设置员工的工资
  20. {
  21. this.salary = salary;
  22. }
  23. public Date getBirthday() //获取员工的生日
  24. {
  25. return birthday;
  26. }
  27. public void setBirthday(Date birthday) //设置员工的生日
  28. {
  29. this.birthday = birthday;
  30. }
  31. }
  32. public class Manager extends Employee
  33. {
  34. private double bonus; //经理的奖金
  35. public double getBonus() //获取经理的奖金
  36. {
  37. return bonus;
  38. }
  39. public void setBonus(double bonus)
  40. {
  41. this.bonus = bonus;
  42. }
  43. }
  44. import java.util.Date; //导入java.util.Date类
  45. public class Test
  46. {
  47. public static void main(String[] args)
  48. {
  49. Employee employee = new Employee(); //创建Employee对象并为其赋值
  50. employee.setName("java");
  51. employee.setSalary(100);
  52. employee.setBirthday(new Date());
  53. Manager manager = new Manager(); //创建Manager对象并为其赋值
  54. manager.setName("明日科技");
  55. manager.setSalary(3000);
  56. manager.setBirthday(new Date());
  57. manager.setBonus(2000);
  58. //输出经理和员工的属性值
  59. System.out.println("员工的姓名"+employee.getName());
  60. System.out.println("员工的工资"+employee.getSalary());
  61. System.out.println("员工的生日"+employee.getBirthday());
  62. System.out.println("经理的姓名"+manager.getName());
  63. System.out.println("经理的工资"+manager.getSalary());
  64. System.out.println("经理的生日"+manager.getBirthday());
  65. System.out.println("经理的奖金"+manager.getBonus());
  66. }
  67. }
复制代码

  1. <P> </P>
复制代码

回复 使用道具 举报
乔钰博 发表于 2014-3-15 22:46
1L说的很好了,给LZ一个建议,用eclipse编写代码多用 alt+/ 能出现提示,还有set get方法用鼠标右键Source ...

我现在还在用记事本来编写代码的初级阶段。。。打算等以后手感好了再用些高级的编写工具。。
回复 使用道具 举报
李猛 中级黑马 2014-3-16 08:22:56
9#
补充一下11行是不是多了个括号
回复 使用道具 举报
zms2100 发表于 2014-3-15 23:20
LZ如果学到后面了,用MyEclipse可以参照楼上推荐的"偷懒"方法。方便省时也不易出错。
错误: 一楼、二楼基本 ...

嗯,谢谢了,虽然目前还不是很懂,看了你们的建议我已经把代码改过来了,可是不知道为什么编译到第45行还是会报错,import java.util.Date;这句代码我现在还没有接触到,不知道是什么意思,可是就是这句报错了,不知道该怎么解决,头疼啊。。。
回复 使用道具 举报
李猛 发表于 2014-3-16 08:22
补充一下11行是不是多了个括号

是的,我已经改正了,就是编译的时候45行报错import java.util.Date;错误:需要class,interface,或enum。下面是我改正后的代码,只剩下这一个错误了,这句代码我还没学到,实在不知道该怎么改,求指教。。
  1. import java.util.Date;
  2. public class Employee
  3. {
  4.         private String name;                        //员工姓名
  5.         private double salary;                        //员工工资
  6.         private Date birthday;                        //员工生日
  7.         public String getName()                        //获取员工姓名
  8.         {
  9.                 return name;
  10.         }

  11.         public void setName(String name)        //设置员工姓名
  12.         {
  13.                 this.name = name;
  14.         }
  15.         public double getSalary()                //获取员工的工资
  16.         {
  17.                 return salary;
  18.         }
  19.         public void setSalary(double salary)        //设置员工的工资
  20.         {
  21.                 this.salary = salary;
  22.         }
  23.         public Date getBirthday()                //获取员工的生日
  24.         {
  25.                 return birthday;
  26.         }
  27.         public void setBirthday(Date birthday)        //设置员工的生日
  28.         {
  29.                 this.birthday = birthday;
  30.         }
  31. }
  32. public class Manager extends Employee
  33. {
  34.         private double bonus;                        //经理的奖金
  35.         public double getBonus()                //获取经理的奖金
  36.         {
  37.                 return bonus;
  38.         }
  39.         public void setBonus(double bonus)
  40.         {
  41.                 this.bonus = bonus;
  42.         }
  43. }
  44. import java.util.Date;                                //导入java.util.Date类
  45. public class Test
  46. {
  47.         public static void main(String[] args)
  48.         {
  49.                 Employee employee = new Employee();        //创建Employee对象并为其赋值
  50.                 employee.setName("java");
  51.                 employee.setSalary(100);
  52.                 employee.setBirthday(new Date());
  53.                 Manager manager = new Manager();        //创建Manager对象并为其赋值
  54.                 manager.setName("明日科技");
  55.                 manager.setSalary(3000);
  56.                 manager.setBirthday(new Date());
  57.                 manager.setBonus(2000);
  58.                 //输出经理和员工的属性值
  59.                 System.out.println("员工的姓名"+employee.getName());
  60.                 System.out.println("员工的工资"+employee.getSalary());
  61.                 System.out.println("员工的生日"+employee.getBirthday());
  62.                 System.out.println("经理的姓名"+manager.getName());
  63.                 System.out.println("经理的工资"+manager.getSalary());
  64.                 System.out.println("经理的生日"+manager.getBirthday());
  65.                 System.out.println("经理的奖金"+manager.getBonus());
  66.         }
  67. }
复制代码
回复 使用道具 举报
你代码编写的时候是分成3个.java文件还是仅有1个,如果是3个按道理没问题,如果是1个,那肯定就错大了。
  1. import java.util.Date;           //导入java.util.Date类,导入类的操作只能在文件开头,不能中间插入;
  2. public class Test          //一个.java文件类中只能有一个用于修饰类的public修饰符,且用在主函数所在类上。
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 Employee employee = new Employee();        //创建Employee对象并为其赋值
  7.                 employee.setName("java");
  8.                 employee.setSalary(100);
  9.                 employee.setBirthday(new Date());
  10.                 Manager manager = new Manager();        //创建Manager对象并为其赋值
  11.                 manager.setName("明日科技");
  12.                 manager.setSalary(3000);
  13.                 manager.setBirthday(new Date());
  14.                 manager.setBonus(2000);
  15.                 //输出经理和员工的属性值
  16.                 System.out.println("员工的姓名"+employee.getName());
  17.                 System.out.println("员工的工资"+employee.getSalary());
  18.                 System.out.println("员工的生日"+employee.getBirthday());
  19.                 System.out.println("经理的姓名"+manager.getName());
  20.                 System.out.println("经理的工资"+manager.getSalary());
  21.                 System.out.println("经理的生日"+manager.getBirthday());
  22.                 System.out.println("经理的奖金"+manager.getBonus());
  23.         }
  24. }

  25. class Employee                                 //见开头说明,所以如果是单个.java,这里权限只是是无(缺省)。
  26. {
  27.         private String name;                        //员工姓名
  28.         private double salary;                        //员工工资
  29.         private Date birthday;                        //员工生日
  30.         public String getName()                        //获取员工姓名
  31.         {
  32.                 return name;
  33.         }

  34.         public void setName(String name)        //设置员工姓名
  35.         {
  36.                 this.name = name;
  37.         }
  38.         public double getSalary()                //获取员工的工资
  39.         {
  40.                 return salary;
  41.         }
  42.         public void setSalary(double salary)        //设置员工的工资
  43.         {
  44.                 this.salary = salary;
  45.         }
  46.         public Date getBirthday()                //获取员工的生日
  47.         {
  48.                 return birthday;
  49.         }
  50.         public void setBirthday(Date birthday)        //设置员工的生日
  51.         {
  52.                 this.birthday = birthday;
  53.         }
  54. }

  55. class Manager extends Employee
  56. {
  57.         private double bonus;                        //经理的奖金
  58.         public double getBonus()                //获取经理的奖金
  59.         {
  60.                 return bonus;
  61.         }
  62.         public void setBonus(double bonus)
  63.         {
  64.                 this.bonus = bonus;
  65.         }
  66. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马