黑马程序员技术交流社区

标题: 实际参数和形式参数长度不同的错误,该如何调试? [打印本页]

作者: 坏男孩    时间: 2014-7-18 17:34
标题: 实际参数和形式参数长度不同的错误,该如何调试?
  1. /*
  2. 假如我们在开发一个系统时需要对员工进行建模,员工包含3个属性:
  3. 姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另外还有一个奖金属性。
  4. 请使用继承的思想设计出员工类和经理类。要求类中提供必要的方法进行属性访问。


  5. 分析:
  6. 员工类:name  id  pay

  7. 经理类:继承了员工,并有自己特有的bonus。
  8. */

  9. //员工类
  10. abstract class Employee
  11. {
  12.         private String name;
  13.         private String id;
  14.         private double pay;

  15.         Employee(String name,String id,double pay)
  16.         {
  17.                 this.name = name;
  18.                 this.id = id;
  19.                 this.pay = pay;
  20.         }

  21.         public abstract void work();

  22. }

  23. //经理
  24. class Manager extends Employee
  25. {
  26.         private int bonus;
  27.         Manager(String name,String id,double pay,int bonus)
  28.         {
  29.                 super(name,id,pay);
  30.                 this.bonus = bonus;
  31.                
  32.         }
  33.         public void work()
  34.         {
  35.                 System.out.println("manager work");
  36.                 //System.out.println(name,id,pay,bonus);
  37.         }
  38. }

  39. //普通员工
  40. class Pro extends Employee
  41. {
  42.         Pro(String name,String id,double pay)
  43.         {
  44.                 super(name,id,pay);
  45.                
  46.         }
  47.         public void work()
  48.         {
  49.                 System.out.println("pro work");
  50.                 //System.out.println(name,id,pay);
  51.         }
  52. }

  53. public class  AbstractTest
  54. {
  55.         public static void main(String[] args)
  56.         {
  57.                 //调用经理类
  58.                 Manager m = new Manager("于向东","Manager01",9000.000,8000);
  59.                 m.work();
  60.                
  61.                 //调用普通员工类
  62.                 Pro p = new Pro("zhangsan","keji01",6000);
  63.                 p.work();
  64.         }
  65. }
复制代码
我想在该例子的基础上增加打印经理和普通员工name,id等属性,但加入上面注释掉的两行打印语句后出现形式参数和实际参数长度不同的错误,该如何调试?

作者: zhxu188    时间: 2014-7-18 17:48
打印语句怎么可以这样写,改成System.out.println(this.name+"   "this.id+"   "+this.pay);同理下面一样改
作者: 韩天雷    时间: 2014-7-18 17:52
Employee中
name; id; pay;为        private
子类不可以直接访问 可以改为protected

作者: 0小菜鸟0    时间: 2014-7-18 18:03
首先你那个打印的语句是不对的,子类不是直接访问父类的私有属性,后面的等会我调试出来给你,我也刚学
作者: 0小菜鸟0    时间: 2014-7-18 18:11
还有         System.out.println("manager work");
                //System.out.println(name,id,pay,this.bonus);
                                System.out.println(getname()+getid()+getpay());
你那个是,号  应该是用+号 ;
作者: 0小菜鸟0    时间: 2014-7-18 18:12
我把获取的代码也发给你 还有记住sprint()语句是不能有,号 的 要用+号连在一起 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;
                }

                public String getid(){
                        return id;
                }
               
                public double getpay(){
                        return pay;
                }

}

作者: meibinlove    时间: 2014-7-18 18:48
不是长度不同吧,应该是没有权限
作者: meibinlove    时间: 2014-7-18 18:50
去掉:private
作者: 坏男孩    时间: 2014-7-21 10:06
zhxu188 发表于 2014-7-18 17:48
打印语句怎么可以这样写,改成System.out.println(this.name+"   "this.id+"   "+this.pay);同理下面一样改 ...

额。。。没注意--当时脑子有点懵
作者: 坏男孩    时间: 2014-7-21 10:35
韩天雷 发表于 2014-7-18 17:52
Employee中
name; id; pay;为        private
子类不可以直接访问 可以改为protected
  1. //员工类
  2. abstract class Employee_1
  3. {
  4.         private String name;
  5.     private String id;
  6.         private double pay;

  7.         Employee_1(String name,String id,double pay)
  8.         {
  9.                 this.name = name;
  10.                 this.id = id;
  11.                 this.pay = pay;
  12.         }

  13.         public abstract void work();

  14.         public String getName()
  15.         {
  16.                 return name;
  17.         }
  18.         public String getID()
  19.         {
  20.                 return id;
  21.         }
  22.         public double getPay()
  23.         {
  24.                 return pay;
  25.         }

  26. }

  27. //经理
  28. class Manager_1 extends Employee_1
  29. {
  30.         private int bonus;
  31.         Manager_1(String name,String id,double pay,int bonus)
  32.         {
  33.                 super(name,id,pay);
  34.                 this.bonus = bonus;
  35.                
  36.         }
  37.         public void work()
  38.         {
  39.                 System.out.println("manager work");
  40.                 System.out.println(getName()+","+getID()+","+getPay()+","+this.bonus);
  41.         }
  42. }

  43. //普通员工
  44. class Pro_1 extends Employee_1
  45. {
  46.         Pro_1(String name,String id,double pay)
  47.         {
  48.                 super(name,id,pay);
  49.                
  50.         }
  51.         public void work()
  52.         {
  53.                 System.out.println("pro work");
  54.                 System.out.println(getName()+","+getID()+","+getPay());
  55.         }
  56. }

  57. class  AbstractTest_1
  58. {
  59.         public static void main(String[] args)
  60.         {
  61.                 //调用经理类
  62.                 Manager_1 m = new Manager_1("于向东","Manager01",9000,8000);
  63.                 m.work();
  64.                
  65.                 //调用普通员工类
  66.                 Pro_1 p = new Pro_1("zhangsan","keji01",6000);
  67.                 p.work();
  68.                
  69.         }
  70. }
复制代码


我试了下,这么改也是能运行的,但是有点不理解。。。
父类中的三个成员变量name,id,pay已经被私有化了,子类应该继承不到,为什么在子类中getName()方法还能打印出来?  求解释。 就是我理解的Manager_1类中应该是没有name,id,pay成员变量的啊?




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