黑马程序员技术交流社区

标题: abstract抽象类的中的问题 [打印本页]

作者: 只想要一盏灯    时间: 2013-10-23 11:11
标题: abstract抽象类的中的问题
本帖最后由 只想要一盏灯 于 2013-10-23 13:21 编辑

刚刚大家说没看懂我说的神马,我改了一下,麻烦大家了!
问题是这样的:
我想在输入了信息之后打印出来的是详细的信息,我应该怎么加那段打印全部信息的代码getInfo()?怎么才能把所有信息都打印出来。意思就是这样:
new Manager("JL","zhangsan",500,500).work();
我希望打印出来的内容包含:
id,name,pay,bonus,work;

/*
假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:
        姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有
一个奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要
的方法进行属性访问。
(我想输入数据后打印出相应的详细数据,我下面的代码不能打印出详细的数据信息)
*/

abstract class Employee//定义员工类,因为含有抽象方法,所以定义为抽象类
{
        private String id;//工号
        private String name;
        private double pay;//工资
        public Employee()
        {}
        public Employee(String id,String name,double pay)
        {
                this.id = id;
                this.name = name;
                this.pay = pay;
        }
        public abstract void work();//因为经理和普通员工的工作内容不同,所以用抽象方法表示
        
}

class Manager extends Employee//经理类
{
        private double bonus;//奖金,经理特有数据
        public Manager(String id,String name,double pay,double bonus)
        {
                super(id,name,pay);
                this.bonus = bonus;

        }
        public void work()//经理的工作
        {
                System.out.println("manager work");
        }
}

class Personnal extends Employee//普通员工类
{
        public Personnal(String id,String name,double pay)
        {
                super(id,name,pay);
        }

        public void work()//普通员工的工作
        {
                System.out.println("yiban work");
        }
}

class AbstractTest001
{
        public static void main(String[] args)
        {
                new Manager("JL","zhangsan",500,500).work();
        }
}







作者: 王松松    时间: 2013-10-23 11:38
看了半天也不知道你想要问什么诶。。{:soso_e143:}
作者: 寻丶丶觅    时间: 2013-10-23 12:01
我也是,看了20多分钟代码,没懂楼主意思,或者楼主把全部代码都写上,感觉没写全啊.
还有,如果想直接用父类完成对两个子类的输出,这个想法也不对吧。父类只是定义子类共有的特性。
让我想到毕老师在多态里讲解的,猫和狗都有吃的方法,但是吃什么都不同的。子类一定要覆盖该方法。不过楼主这里父类已经对成员变量属性私有化了,输出时也不能用super调用了。建议父类的成员不私有
作者: 漫步人    时间: 2013-10-23 12:11
问题说清楚点就更好了!
作者: 只想要一盏灯    时间: 2013-10-23 12:50
寻丶丶觅 发表于 2013-10-23 12:01
我也是,看了20多分钟代码,没懂楼主意思,或者楼主把全部代码都写上,感觉没写全啊.
还有,如果想直接用父 ...

额,这个代码是全的啊,问题我改一下 ,你再看看!
作者: 只想要一盏灯    时间: 2013-10-23 12:57
王松松 发表于 2013-10-23 11:38
看了半天也不知道你想要问什么诶。。

额,好吧,我表达能力没及格!我是想加入一段代码,然后能够将所有信息全部打印出来
作者: 遗忘    时间: 2013-10-23 12:58
子类就可以继承父类的所有成员和方法,包括私有属性,只是私有属性被继承下来却不能访问 只能通过public方法访问继承下来的私有属性 可以用set get 方法来访问
例如:
  1. class A {
  2.     private int a;
  3.    
  4.     public int getA(){
  5.         return a;
  6.     }
  7.     public void setA(int a){
  8.         this.a=a;
  9.     }

  10. }
  11. class B extends A{
  12.      private int b;

  13.     public int getB() {
  14.         return b;
  15.     }

  16.     public void setB(int b) {
  17.         this.b = b;
  18.     }
  19. }
复制代码
那么当B b1=new B()时。b1可以使用setA()getA()访问控制从A类中继承来的私有属性a;

楼主的意思是打印出一个经理的详细信息打印出来:可以定义一个show()方法 代码如下:
  1. abstract class Employee
  2. {
  3.                 private String id;
  4.                 public String getid(){
  5.                         return id;
  6.                     }
  7.                 //public void setid(String id){
  8.                 //      this.id=id;
  9.                 //}
  10.                 private String name;
  11.                 public String getname(){
  12.                 return name;
  13.             }
  14.                 //public void setname(String name){
  15.             //    this.name=name;
  16.             //}
  17.                 private double pay;
  18.                 public double getpay(){
  19.                 return pay;
  20.             }
  21.                 //public void setpay(double pay){
  22.             //    this.pay=pay;
  23.             //}
  24.         public Employee()
  25.         {}
  26.         public Employee(String id,String name,double pay)
  27.         {
  28.                 this.id = id;
  29.                 this.name = name;
  30.                 this.pay = pay;
  31.         }
  32.         public abstract void work();
  33. }

  34. class Manager extends Employee
  35. {
  36.         private double bonus;
  37.         public Manager(String id,String name,double pay,double bonus)
  38.         {
  39.                 super(id,name,pay);
  40.                 this.bonus = bonus;

  41.         }
  42.         public void work()
  43.         {
  44.                 System.out.println("manager work");
  45.         }
  46.         public void show(){
  47.                 System.out.println("id:"+super.getid()+",name:"+super.getname()+",pay:"+super.getpay()+",bonus:"+bonus);
  48.         }
  49. }

  50. class Personnal extends Employee
  51. {
  52.         public Personnal(String id,String name,double pay)
  53.         {
  54.                 super(id,name,pay);
  55.         }

  56.         public void work()
  57.         {
  58.                 System.out.println();
  59.         }
  60.       
  61. }

  62. class AbstractTest001
  63. {
  64.         public static void main(String[] args)
  65.         {
  66.                 new Manager("JL","zhangsan",500,500).show();
  67.         }
  68. }
复制代码
楼主new Manager("JL","zhangsan",500,500).work(),只是调用了Manager类中的work()方法,自然只输出:manager work
作者: 王松松    时间: 2013-10-23 13:08
你看这样行不。

  1. public String  work()
  2. {
  3.       retrun id+" "+name+" "+pay+" "+bonus+" "+work;
  4. }
复制代码

作者: 遗忘    时间: 2013-10-23 13:15
如果楼主想输出经理工作信息 和经理个人信息的话就要把主函数内容改下
  1. class AbstractTest001
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                // new Manager("JL","zhangsan",500,500).show();
  6.                Manager manager = new Manager("JL","zhangsan",500,500);
  7.                manager.work();
  8.                manager.show();
  9.         }
  10. }
复制代码

作者: 只想要一盏灯    时间: 2013-10-23 13:20
遗忘 发表于 2013-10-23 13:15
如果楼主想输出经理工作信息 和经理个人信息的话就要把主函数内容改下

嗯嗯,谢啦,原来是要在父类中get一下啊,才能在子类中用super调用额,忘了这个,已经搞定了,我把那个show的内容全部加到那个work里面去了就OK啦!多谢啊
作者: 只想要一盏灯    时间: 2013-10-23 13:22
王松松 发表于 2013-10-23 13:08
你看这样行不。

嗯嗯,这样可以的,我直接在work下面打印出来了,谢啦
作者: 只想要一盏灯    时间: 2013-10-23 13:23
寻丶丶觅 发表于 2013-10-23 12:01
我也是,看了20多分钟代码,没懂楼主意思,或者楼主把全部代码都写上,感觉没写全啊.
还有,如果想直接用父 ...

已经搞定了,麻烦你啦
作者: 遗忘    时间: 2013-10-23 13:23
只想要一盏灯 发表于 2013-10-23 13:22
嗯嗯,这样可以的,我直接在work下面打印出来了,谢啦

客气了 ,加油!




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