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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Mokill0911 中级黑马   /  2014-5-31 03:15  /  2227 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Mokill0911 于 2014-7-15 22:48 编辑

最近看到了抽象类,然后看毕老师降到了一个员工建模的小练习。

自己写完了代码,也实现了基本需求,然后突发奇想是否可以加入一个扩展功能。

主要思想是在父类Employee中加入一个扩展功能,能够显示雇员的信息,如名字,工号和工资;

代码如下:
  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.         public void display()// 显示雇员的信息;
  14.         {
  15.                 System.out.println(name+","+id+","+pay);

  16.         }
  17. }

  18. class Pro extends Employee
  19. {
  20.         Pro(String name,String id,double pay)
  21.         {
  22.                 super(name,id,pay);
  23.         }

  24.         public void work()
  25.         {
  26.                 System.out.println("Pro working");
  27.         }

  28. }
  29. class Manager extends Employee
  30. {
  31.         private double bonus;
  32.         Manager(String name,String id,double pay,double bonus)
  33.         {
  34.                 super(name,id,pay);
  35.                 this.bonus= bonus;

  36.         }

  37.         public void work()
  38.         {
  39.                 System.out.println("Manager working");
  40.         }
  41. /*        public void display()
  42.         {
  43.                 System.out.println(super.name+","+super.id+","+super.pay+","+this.bonus);
  44.         }
  45. */        
  46. }

  47. class AbstractTest2
  48. {
  49.         public static void main(String[] args)
  50.         {
  51.                 Manager mJoker = new Manager("Mjokers","M001",8000,10000);
  52.                 mJoker.work();
  53.                 mJoker.display();
  54.         }

  55. }
复制代码


问题出现在经理Manager类中;

当我想要在Manager类里通过复写方式扩展父类Employee里的display() 方法时,编译时提示错误;

name可以在Employee中访问private

因为按照需求,经理比普通员工多了一个奖金属性,所以父类Employee里的display()方法显示的信息并不完善,只有普通雇员的三个属性,但当加入注释里的语句之后,编译会出错。

望各位指教一下思路。

先行谢过:)

6 个回复

倒序浏览
子类继承父类的是非私有变量和方法,可以通过父类提供的访问方法来对父类的私有变量进行访问,也就是经常用到的get,set
回复 使用道具 举报
我想说的是。子类是不可以访问 父类的私有成员。super.name这个能访问?
回复 使用道具 举报
塔罗 发表于 2014-5-31 09:59
我想说的是。子类是不可以访问 父类的私有成员。super.name这个能访问?

不能,我都试过,不管是super.   还是this.   都会有那个private提示……
回复 使用道具 举报
shisishishisi 发表于 2014-5-31 03:50
子类继承父类的是非私有变量和方法,可以通过父类提供的访问方法来对父类的私有变量进行访问,也就是经常用 ...

哇塞注意到回帖时间才感动 0 。0

get和set 我今天试一下,感觉上应该是继承那部分没有听太透彻~  
回复 使用道具 举报
Mokill0911 发表于 2014-6-1 00:16
哇塞注意到回帖时间才感动 0 。0

get和set 我今天试一下,感觉上应该是继承那部分没有听太透彻~   ...

回帖的那个点刚好学习完准备睡觉就随意逛了逛。。。共勉啊~~!
回复 使用道具 举报
display()类似work()的原理,应该弄成抽象的吧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马