黑马程序员技术交流社区

标题: 自学中出现了问题,求解答 [打印本页]

作者: 。。。。。。。    时间: 2013-10-24 12:15
标题: 自学中出现了问题,求解答
黑马程序员_毕向东_Java基础视频教程第07天-10-面向对象(抽象类练习)

在经理类中work()方法体中为什么访问不到name属性呢,明明已经继承了雇员类的?
代码贴上:


  1. /**
  2. * 需求:开发一个系统,需要对员工进行建模,员工有三个属性,姓名、工号、工资,
  3. * 经理也是员工,除了含有员工的属性外,还具备奖金属性,
  4. * 请用继承的思想设计出类,要求类中提供必要的方法进行属性访问
  5. *
  6. *
  7. */
  8. public class Abstract_Show {
  9. public static void main(String[] args) {
  10. Manager m = new Manager("zhangsan","技术30",5000.00,50000.00);
  11. m.work();
  12. }
  13. }

  14. //雇员类
  15. abstract class Employee{
  16. private String name;
  17. private String id;
  18. private double pay;

  19. Employee(String name,String id,double pay){
  20. this.name = name;
  21. this.id = id;
  22. this.pay = pay;
  23. }

  24. abstract void work();
  25. }

  26. //普通员工类
  27. class Pro extends Employee{

  28. Pro(String name,String id,double pay){
  29. super(name,id,pay); //调用父类的构造方法对属性进行实例化
  30. }
  31. //复写了工作方法
  32. void work(){
  33. System.out.println("pro work");
  34. }
  35. }

  36. //经理类
  37. class Manager extends Employee{
  38. //经理特有的奖金属性
  39. private double bouns;
  40. Manager(String name,String id,double pay,double bonus){
  41. super(name,id,pay); //调用父类的构造方法对属性进行实例化
  42. this.bouns = bonus; //对经理特有的属性进行单独实例化
  43. }
  44. //复写了工作方法
  45. void work(){
  46. System.out.println(name);
  47. }
  48. }
复制代码

作者: 王飚    时间: 2013-10-24 12:33
因为你的雇员类中的name属性是private私有,所以只能在 Employee类中访问,如果想要在其它类中访问,那么就将name的访问权限改成public,
即:
public String name;
作者: 。。。。。。。    时间: 2013-10-24 12:38
王飚 发表于 2013-10-24 12:33
因为你的雇员类中的name属性是private私有,所以只能在 Employee类中访问,如果想要在其它类中访问,那么就 ...

可是经理类继承了雇员类,不就相当于拥有了name属性吗?
作者: 孙涛00    时间: 2013-10-24 12:51
只能继承公有的属性
作者: 王飚    时间: 2013-10-24 12:58
。。。。。。。 发表于 2013-10-24 12:38
可是经理类继承了雇员类,不就相当于拥有了name属性吗?
  1. /*
  2. 这个问题是要明确继承成员变量的内容:
  3. 这样说吧,就是子类可以继承父类的所有除了私有private之外的所有成员属性和成员方法;
  4. 但是:private修饰的成员只能在本类中才能被调用,这是封装的特点,也是安全性的体现;
  5. 如下面的注释:

  6. */

  7. class Fu
  8. {
  9.         String name="jkwang";//这里是默认的权限,子类可以继承,但如果这里加上private那么子类就不能继承
  10.         protected void show()
  11.         {
  12.         System.out.println("Fu");
  13.         }
  14. }
  15. class Zi extends Fu
  16. {
  17.         //这里,子类可以继承父类所有非私有的成员属性和方法,但是不能继承private成员;
  18. }
  19. class ExtendsDemo
  20. {
  21.         public static void main(String[] args)
  22.         {
  23.         new Zi().show();
  24.         System.out.println(new Zi().name);
  25.         }
  26. }
复制代码

作者: 。。。。。。。    时间: 2013-10-24 13:01
王飚 发表于 2013-10-24 12:58

谢谢,谢谢,我懂了,解答的太详细了!
作者: 漫步人    时间: 2013-10-24 13:06
继承和封装的特性!
在毕老师的视频中,private私有的,可以通过反射中的暴力反射获取,这一点事可行的!
希望对你有帮助!




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