黑马程序员技术交流社区

标题: 请教:关于抽象类问题 [打印本页]

作者: 黑龙江—刘鹏    时间: 2012-7-15 15:54
标题: 请教:关于抽象类问题
本帖最后由 黑龙江—刘鹏 于 2012-7-15 17:07 编辑

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,int bonus)
        {
                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");}
}
class lianxi
{
        public static void main(String[] args)
        {Manager a=new Manager("liupeng","110",1000,500);            }
}
此段如何只改变 class lianxi 类来完成 name id pay bonus的打印呢
如果不能 可以在abstract class Employee类中加上一个打印name id pay的函数就可以了
但是打印bonus的功能难道只能加到class Manager extends Employee类中吗?
能不能通过别的方式实现呢?

作者: 全海波    时间: 2012-7-15 16:30
标题: RE: 请教:关于抽象类问题
  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. <FONT color=red>//此段如何只改变 class lianxi 类来完成 name id pay bonus的打印呢
  15. //如果不能 可以在abstract class Employee类中加上一个打印name id pay的函数就可
  16. //第一个问题:
  17. public void setName()
  18. {
  19. this.name = name;
  20. }
  21. public String getName(String name)
  22. {
  23. this.name = name;
  24. }
  25. public void setId()
  26. {
  27. this.id= id;
  28. }
  29. public int  getId(int id)
  30. {
  31. this.id= id;
  32. }
  33. public void set<FONT color=red>Pay</FONT>()
  34. {
  35. this.pay = pay;
  36. }
  37. public double getPay(double pay)
  38. {
  39. this.pay = pay;
  40. }
  41. 至于第二个问题,也可以像上面那样在主函数中打印
  42. </FONT>
  43. Manager extends Employee
  44. {
  45. private int bonus;
  46. Manager(String name,String id,double pay,int bonus)
  47. {
  48. super(name,id,pay);
  49. this.bonus = bonus;
  50. }
  51. public void work()
  52. {
  53. System.out.println("manager work");
  54. }
  55. }

  56. class Pro extends Employee
  57. {
  58. Pro(String name,String id,double pay)
  59. {
  60. super(name,id,pay);
  61. }
  62. public void work()
  63. {
  64. System.out.println("pro work");
  65. }
  66. }
  67. class lianxi
  68. {
  69. public static void main(String[] args)
  70. {
  71. Manager a=new Manager("liupeng","110",1000,500);
  72. <FONT color=#ff0000>System.outprintln("geName"+a.getname()+"getId"+a.getId() +" getPay"+getpay());</FONT>
复制代码

作者: 韩伟    时间: 2012-7-15 16:45
abstract class Employee
{
         private String name;      //Employee类中的成员变量是私有的,只有在类中能访问,甚至不能被子类继承,更别说在lianxi类中访问了 。所以如果要打印必须在Employee类内部添加打印方法
         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();
     //可以在此处添加一个show方法,方法体如下:
       public void show()
        {
         System.out.println(this.name);
         System.out.println(this.id);
         System.out.println(this.pay);
        }


}



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");
         }
        //可以在此重写show方法,对对象进行打印,方法如下:
         public void show()
         {
          super. show();
          System.out.println(bonus);
         }

}

class Pro extends Employee
{
         Pro(String name,String id,double pay)
         {
                 super(name,id,pay);
         }
         public void work()
         {
                 System.out.println("pro work");
         }
}




class lianxi
{
         public static void main(String[] args)
        {
                 Manager a=new Manager("liupeng","110",1000,500);
                    a.show();      //在此调用方法打印
        }
}      结果如图:

作者: 黄昆    时间: 2012-7-15 16:55
abstract class Employee
{
        //其实你这两个问题,时统一个问题造成的。
        //在定义类时要注意一些规则,类中被private修饰的属性,一般要对外提供get和set方法。以便在以后能够对属性的值进行操作。
        //我们在初期学习室一定要养成良好的习惯,不然在以后的学习中会出现很多不必要的麻烦

        private String name;
        private String id;
        private double pay;
       public String getName() {
                        return name;
                }

                public void setName(String name) {
                        this.name = name;
                }

                public String getId() {
                        return id;
                }

                public void setId(String id) {
                        this.id = id;
                }

                public double getPay() {
                        return pay;
                }

                public void setPay(double pay) {
                        this.pay = 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;
       public int getBonus() {
                        return bonus;
                }
                public void setBonus(int bonus) {
                        this.bonus = 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
{
        Pro(String name,String id,double pay)
        {
                super(name,id,pay);
        }
        public void work()
        {
                System.out.println("pro work");
        }
}




public class LianXi
{
        public static void main(String[] args)
       {
                Manager a=new Manager("liupeng","110",1000,500);
                System.out.println("name="+a.getName()+" id="+a.getId()+" pay="+a.getPay()+" bonus="+a.getBonus());
       }
}
作者: 黑龙江—刘鹏    时间: 2012-7-15 16:55
韩伟 发表于 2012-7-15 16:45
abstract class Employee
{
         private String name;      //Employee类中的成员变量是私有的,只有 ...

嗯 谢谢 却是可行{:3_53:}
作者: 黑龙江—刘鹏    时间: 2012-7-15 17:00
hkylp 发表于 2012-7-15 16:55
abstract class Employee
{
        //其实你这两个问题,时统一个问题造成的。

嗯 你这个却是我想要的 在练习中 用打印代码打印出来 谢谢了
作者: 黑龙江—刘鹏    时间: 2012-7-15 17:03
hkylp 发表于 2012-7-15 16:55
abstract class Employee
{
        //其实你这两个问题,时统一个问题造成的。

public class LianXi
这个类 去掉 public
就可以运行了呀
作者: 黑龙江—刘鹏    时间: 2012-7-15 17:05
hkylp 发表于 2012-7-15 16:55
abstract class Employee
{
        //其实你这两个问题,时统一个问题造成的。

但是运行后是一对英文呀
作者: 黑龙江—刘鹏    时间: 2012-7-15 17:06
hkylp 发表于 2012-7-15 16:55
abstract class Employee
{
        //其实你这两个问题,时统一个问题造成的。

哦了 知道了 lianxi 改成 LianXi就好了




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