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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© steven152 中级黑马   /  2014-6-30 21:28  /  2445 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我照着毕老师的程序敲的,结果出错,自己找不到原因,求师哥们指点一下!
/*
        day7-10抽象类练习:员工和经理
*/

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,int bonus )
        {
                super (name,id,pay);
                this.bonus = bonus;
                public  void work()
                {
                        System.out.println("manager work");
                };
        }
}
class Pro extends Employee
        {
                super(name,id,pay);
                public void work()
                {
                        System.out.println("por work");
                }
        }
class Work
{
        public static void main(String [] args)
        {
                Manager worker = new Manager(Steven,001,10000);
                System.out.println(worker);
        }
}

7 个回复

倒序浏览
恩,这个问题,我的意见是,你的Employee类中定义了抽象方法而你却没用将Employee类定义成抽象类,这恐怕不行。如果一个类中有抽象方法,那么这个类一定要抽象类
回复 使用道具 举报
没有翅膀的小鸟 发表于 2014-6-30 21:45
恩,这个问题,我的意见是,你的Employee类中定义了抽象方法而你却没用将Employee类定义成抽象类,这恐怕不 ...

没用,加了abstract class  Employee,也是有错误提示
回复 使用道具 举报
我觉你在去看看毕老师的视频,你敲的和比老师的不一样吧。
还有 System.out.println(worker);这句直接打印的是worker这个对象的地址值。
而且Manager worker = new Manager(Steven,001,10000);中Steven没有加双引号啊
回复 使用道具 举报
/*
需求:有一个员工类,员工有3个属性,姓名,工资,工号。经理也是员工,除了有员工类的属性外,还有一个奖金属性。
请使用继承的思想设计出员工类和经理类,并写出提供必要的方法访问属性。

思路步骤:
1.员工类是父类,经理类是子类。
2.定义一个show方法,当调用show方法时,会打印出姓名、工号、工资,经理还会打印出奖金。
3.在一个公司里,除了老板,其他都为员工。员工就要为老板工作,所以员工类要定义一个work方法,可是经理的工作与普通员工的工作肯定不同,
        所以作为父类的员工类,work方法应该为抽象方法,当经理类继承以后,重写work方法就可以完成经理工作的功能。
*/


abstract class  Employee
{       
//成员属性一般不暴露出来,用private修饰
        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();
        public void show()
        {
                System.out.println(name+"_"+ID+"_"+pay);
        }
}
class Manager extends Employee
{
        private double bonus;
        Manager(String name,String ID,double pay,double bonus)
        {

//调用父类构造函数注意格式
                super(name,ID,pay);
                this.bonus=bonus;
        }
        public void  work()
        {
                System.out.println("管理员工,负责决策");
        }
        public void show()
        {
                super.show();
                System.out.println("经理的奖金:"+bonus);
        }
}
class NormalEmployee extends Employee
{
        NormalEmployee(String name,String ID,double pay)
        {
                super(name,ID,pay);
        }
        public void work()
        {
                System.out.println("负责框架设计");
        }

       
}
class TestCompany
{
        public static void main(String[] args)
        {
                Manager m1=new Manager("xiahuan","总经理20101693",8000.00,2000.00);
                m1.show();
                m1.work();

                NormalEmployee n=new NormalEmployee("linfeng","技术部20101881",8000.00);
                n.show();
                n.work();

               
        }
}
我这个是照着毕老师敲的,你看看
回复 使用道具 举报
  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. }
  15. class Manager extends Employee
  16. {
  17.         private int  bonus;
  18.                 Manager (String name,String id,double pay,int bonus )//修改二:少了参数
  19.         {
  20.                 super (name,id,pay);
  21.                 this.bonus = bonus;
  22.         }
  23.                  public void work()
  24.                 {
  25.                                 System.out.println("manager work");
  26.         }
  27.          
  28. }
  29. class Pro extends Employee
  30. {       
  31.         Pro (String name,String id,double pay )//修改三:super不是方法,不可以这样写。
  32.         {
  33.         super(name,id,pay);
  34.         }
  35.        
  36.         public void work()
  37.         {
  38.                 System.out.println("por work");
  39.         }
  40. }      
  41. class Work
  42. {
  43.         public static void main(String [] args)
  44.         {
  45.                                 //修改四:因为是String,所以要加"".
  46.                 Manager worker = new Manager("Steven","001",10000,1000);
  47.                 System.out.println(worker);
  48.         }
  49. }
复制代码

我帮你修改了错误,剩下的打印语句你自己把它不全就可以了。
回复 使用道具 举报
如果你非要通过对象来打印的话,你要在Manager类中重写头toString方法。
然后在Employee中用getName方法得到相关信息。
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();
                public String getName()
                {
                        return name;
                }
               

               
}
class Manager extends Employee
{
        private int  bonus;
                Manager (String name,String id,double pay,int bonus )
        {
                super (name,id,pay);
                this.bonus = bonus;
        }
                 public void work()
                {
                                System.out.println("manager work");
        }
                public String toString()
        {
                        return "name:"+getName();
        }
         
}
这样就可以了
回复 使用道具 举报
没有翅膀的小鸟 发表于 2014-7-1 21:55
/*
需求:有一个员工类,员工有3个属性,姓名,工资,工号。经理也是员工,除了有员工类的属性外,还有一个 ...

没错,我缺少了一个show 方法,现在改过来就OK了!谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马