黑马程序员技术交流社区

标题: 帮我看下这个代码,为什么会出现错误 [打印本页]

作者: 杨晓燕    时间: 2013-4-26 14:52
标题: 帮我看下这个代码,为什么会出现错误
本帖最后由 杨晓燕 于 2013-4-26 19:39 编辑
  1. abstract class Employee
  2. {
  3.   private String name;
  4.   private String id;
  5.   private double pay;
  6.   Employee(String name,String id,double pay)
  7.   {
  8.           this.name=name;
  9.           this.id=id;
  10.           this.pay=pay;
  11.   }
  12.   public abstract void work();
  13. }
  14. class Manager extends Employee
  15. {
  16. private int bonus;
  17. Manager(String name,String id,double pay)
  18. {
  19.          super(name,id,pay);
  20.          this.bonus=bonus;
  21. }
  22. public void work()
  23. {
  24.          System.out.println("Manager  work");
  25. }
  26. class Pro extends Employee
  27. {
  28.          Pro(String name,String id,double pay)
  29.          {
  30.                  super(name,id,pay);
  31.          }
  32.          public void work()
  33.          {
  34.                  System.out.println("Pro  work");
  35.          }
  36. }
  37. }
  38. class EmployeeDemo
  39. {
  40. public static void main(String[] args)
  41. {
  42.         Pro p=new Pro("yang","789a",5000);
  43.         p.work();
  44. //System.out.println();        
  45. }
  46. }
复制代码
求详细解释
作者: 谭威    时间: 2013-4-26 14:59
不需要详细解释,你的Pro类写到Manager类里面去了。
作者: 刘福双    时间: 2013-4-26 15:23
public class EmployeeDemo {
        public static void main(String[] args) {
                Pro p = new Pro("yang", "789a", 5000);
                p.work();
                // System.out.println();
        }

        public abstract class Employee {
                private String name;
                private String id;
                private double pay;

                Employee(String name, String id, double pay) {
                        this.name = name;
                        this.id = id;
                        this.pay = pay;
                }

                public abstract void work();
        }

        class Manager extends Employee {
                private int bonus;

                Manager(String name, String id, double pay) {
                        super(name, id, pay);
                        this.bonus = bonus;
                }

                public void work() {
                        System.out.println("Manager  work");
                }

                class Pro extends Employee {
                        Pro(String name, String id, double pay) {
                                super(name, id, pay);
                        }

                        public void work() {
                                System.out.println("Pro  work");
                        }
                }
        }

}
好使了
作者: java冬冬    时间: 2013-4-26 15:24
Pro类继承Employee类,不应写在Manager中,正确代码及运行结果如下:{:soso_e152:}
  1. abstract class Employee
  2. {
  3. private String name;
  4. private String id;
  5. private double pay;
  6. Employee(String name,String id,double pay)
  7. {
  8. this.name=name;
  9. this.id=id;
  10. this.pay=pay;
  11. }
  12. public abstract void work();
  13. }
  14. class Manager extends Employee
  15. {
  16. private int bonus;
  17. Manager(String name,String id,double pay)
  18. {
  19. super(name,id,pay);
  20. this.bonus=bonus;
  21. }
  22. public void work()
  23. {
  24. System.out.println("Manager work");
  25. }
  26. }
  27. class Pro extends Employee
  28. {
  29. Pro(String name,String id,double pay)
  30. {
  31. super(name,id,pay);
  32. }
  33. public void work()
  34. {
  35. System.out.println("Pro work");
  36. }
  37. }

  38. class EmployeeDemo
  39. {
  40. public static void main(String[] args)
  41. {
  42. Pro p=new Pro("yang","789a",5000);
  43. p.work();
  44. //System.out.println();
  45. }
  46. }
复制代码
运行结果:


作者: 梁航斌    时间: 2013-4-26 15:40
美女,你的括号没注意,是不是复制的时候放错位置了?很负责任的帮你改了
  1. abstract class Employee
  2. {
  3.         private String name;
  4.         private String id;
  5.         private double pay;
  6.         Employee(String name,String id,double pay){
  7.                 this.name=name;
  8.                 this.id=id;
  9.                 this.pay=pay;
  10.         }
  11.         public abstract void work();
  12. }
  13. class Manager extends Employee
  14. {
  15.         private int bonus;
  16.         Manager(String name,String id,double pay){
  17.                 super(name,id,pay);
  18.                 this.bonus=bonus;
  19.         }
  20.         public void work(){
  21.                 System.out.println("Manager  work");
  22.         }
  23. }
  24. class Pro extends Employee
  25. {
  26.          Pro(String name,String id,double pay)
  27.          {
  28.                  super(name,id,pay);
  29.          }
  30.          public void work()
  31.          {
  32.                  System.out.println("Pro  work");
  33.          }
  34. }
  35. class EmployeeDemo
  36. {
  37.         public static void main(String[] args){
  38.         Pro p=new Pro("yang","789a",5000);
  39.         p.work();
  40.         //System.out.println();        
  41.         }
  42. }
复制代码

作者: 袁梦希    时间: 2013-4-26 15:40
老妹你好,
我来帮你解答一下,详细内容看注释。
  1. package com.xbox;

  2. abstract class Employee {
  3. //这里定义了三个私有变量,name id pay
  4. private String name;
  5. private String id;
  6. private double pay;

  7. //因为你定义了这三个私有的变量,所以应该有提供get和set方法,
  8. //所以现在上面的三个变量是空的

  9. //如果父类中有带参数的构造函数,那么就不会初始化空的构造函数
  10. Employee(String name, String id, double pay) {
  11. this.name = name;
  12. this.id = id;
  13. this.pay = pay;
  14. }
  15. //这是定义了一个抽象方法,没有方法体
  16. public abstract void work();
  17. }

  18. //定义了一个Manager类继承了Employee抽象类
  19. class Manager extends Employee {
  20. private int bonus;//定义了私有的成员变量

  21. Manager(String name, String id, double pay) {
  22. super(name, id, pay);
  23. this.bonus = bonus; //因为没有生命局部变量,所以这里的变量也是空的
  24. //他不起什么作用
  25. }

  26. //这是覆盖了父类中的work()抽象方法
  27. public void work() {
  28. System.out.println("Manager work");
  29. }
  30. }
  31. //有定义了一个Pro类继承了Employee抽象类
  32. class Pro extends Employee {
  33. //同时也初始化了带参的构造函数
  34. Pro(String name, String id, double pay) {
  35. //super调用父类的带参数的构造函数,因为父类中没有空构造函数
  36. //所以必须加上super关键字
  37. super(name, id, pay);
  38. }
  39. //又是覆盖了父类中的work方法
  40. public void work() {
  41. System.out.println("Pro work");
  42. }
  43. }

  44. class Test3 {
  45. //测试类
  46. public static void main(String[] args) {
  47. //因为你只初始化了Pro类,所以只能对他进行操作。
  48. Pro p = new Pro("yang", "789a", 5000);
  49. p.work();//打印Pro类里面覆盖的方法

  50. }
  51. }
复制代码

作者: surce2012    时间: 2013-4-26 15:50
也可以当做内部类来处理
在类EmployeeDemo中创建对象时要这样写
Manager.Pro p = new Manager().new Pro();
p.work();
不过在这里定义内部类没什么意义。
作者: 杨晓燕    时间: 2013-4-26 19:24
多谢大家,知道哪里错了
作者: 黑马龙子    时间: 2013-7-6 19:13
package com.day.ten;
abstract class Employee
{
        //定义私有变量,name id pay
        private String name;
        private String id;
        private double pay;
        //为私有变量私有的变量提供get和set方法,
        Employee(String name,String id,double pay){
               
                this.name=name;
                this.id=id;
                this.pay=pay;
        }
        //定义一个没有方法体的抽象方法,
        public abstract void work();
        }
//定义一个Manager类继承Employee抽象类
        class Manager extends Employee
        {
                private int bonus;
                        Manager(String name,String id,double pay)
                        {
                                super(name,id,pay);
                                this.bonus=bonus;
                        }
                        public void work()
                        {
                                //覆盖父类中的work()抽象方法
                                System.out.println("Manager work");
                        }
        }
        //定义一个Pro类继承了Employee抽象类

class Pro extends Employee{
        //初始化带参的构造函数
                Pro(String name,String id,double pay){
                        super(name,id,pay);
                }
                //覆盖父类中的work方法
                public void work(){
                        System.out.println("Pro work");
                }
}

class EmployeeDemo
{//测试类
        public static void main(String[] args){
                Pro p=new Pro("yang","789a",5000);
                //打印Pro类里面覆盖的方法
                p.work();
        }
}
作者: 杨晓燕    时间: 2013-7-7 08:39
黑马龙子 发表于 2013-7-6 19:13
package com.day.ten;
abstract class Employee
{

呵呵,谢谢,不过问题已经解决了
作者: 黑马龙子    时间: 2013-7-8 18:09
杨晓燕 发表于 2013-7-7 08:39
呵呵,谢谢,不过问题已经解决了

呵呵...没事的。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2