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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 luck28 于 2013-1-17 23:02 编辑

先看一段代码,name和age是父类私有的,但是子类继承之后,也有了。
  1. class Person //父类
  2. {
  3.         private String name;//私有的
  4.         private int age;
  5.         
  6.         public void setName(String name)
  7.                 {
  8.                         this.name = name;
  9.                 }
  10.         
  11.         public void setAge(int age)
  12.                 {
  13.                         this.age = age;        
  14.                 }
  15.                
  16.         public int getAge(){return age;}
  17.         public String getName(){return name;}
  18. }

  19. class Stutents extends Person
  20. {
  21.                 private String school;
  22.                 public String getSchool(){return school;}
  23.                 public void setSchool(String school)
  24.                 {
  25.                                 this.school = school;        
  26.                 }        
  27. }

  28. public class TestPerson
  29. {
  30.         public static void main(String args[])
  31.         {
  32.                 Stutents stutents = new Stutents();
  33.                 stutents.setName("johh");
  34.                 stutents.setAge(18);
  35.                 stutents.setSchool("SCH");
  36.                 System.out.println(stutents.getAge());
  37.                 System.out.println(stutents.getName());
  38.                 System.out.println(stutents.getSchool());
  39.         }
  40. }

  41. /*
  42. 子类继承父类所有的东西,包括private。
  43. 拥有所有权,但没有使用权。
  44. */
复制代码
子类Student本身并没有定义name,但是他也有了自己的属性name,age,也就是说,他继承来了父类的,但是这个不可以直接访问,要在父类中提供方法访问。。

也就是子类继承了父类所有的东西,包括private,只是没有直接访问权。

子类对象中包含一个父类对象。子类对象大于父类对象,这是马士兵老师说的。





评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1 神马都是浮云

查看全部评分

9 个回复

倒序浏览
{:soso_e179:}...
回复 使用道具 举报
不错不错,学习了....
回复 使用道具 举报
我感觉这个这跟继承什么 private 没什么关系吗· 子类继承父类· new的子类对象也就是父类的对象··
父类本身就是从子类中抽取出来的· 父类本身就是子类的一部分·
但是· 同时· 父类又是一个独立的类·即使你new 的是父类的对象·也没办法在它本身的类之外的类中直接掉用private修饰的属性不是吗!!!
回复 使用道具 举报
这应该不算是继承,A类中创建了private类型成员,而想要别的类访问,那必须要在A类中创建可以访问其中private类型的方法,而你上面的例子就是在子类中调用了父类中的方法来访问父类中的private成员,所以不是说子类继承父类中的包括private类在内的成员
你自己也说了,子类不能直接访问,而是要通过调用父类中的方法才能访问,所以这从本质来说并不是继承了父类的private成员

再举一个例子,父亲告诉儿子自己有两套房子,但是没有告诉儿子自己有一张银行卡,到时候继承的时候儿子根本不知道银行卡的事情,你能说儿子已经继承了父亲的房子和银行卡么?
回复 使用道具 举报
子类并没有定义name成员变量,但是在下面却可以有值,这是为啥呢?难道不是子类有了自己的成员变量name?
回复 使用道具 举报
孔斌 中级黑马 2013-1-18 22:17:26
7#
貌似,在创建子类对象的时候,默认调用了父类空的构造方法,子类继承了父类的所有东西,包括私有成员,只有拥有权,无访问权
回复 使用道具 举报
是会继承的,但是没有使用权。也访问不到。只能通过从父类继承过来的公开方法访问。
这一点我在core java 书籍上也看到了
回复 使用道具 举报
杨浩 中级黑马 2013-1-21 21:10:05
9#
使用private使成员变量私有,不是为了不让子类继承...而是为了封装,让外部看不到。
这样只能由你定义的公有的方法来访问,这样是为了安全。
不然别的人使用你定义的类不是可以随意使用你定义的所有成员么。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马