黑马程序员技术交流社区

标题: 反驳些许人的观点,子类继承父类所有的东西,包括private [打印本页]

作者: 王溢君    时间: 2013-1-17 22:58
标题: 反驳些许人的观点,子类继承父类所有的东西,包括private
本帖最后由 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,只是没有直接访问权。

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






作者: 汪平乐    时间: 2013-1-17 23:09
{:soso_e179:}...
作者: jonn    时间: 2013-1-18 01:29
不错不错,学习了....
作者: 23559768    时间: 2013-1-18 15:18
我感觉这个这跟继承什么 private 没什么关系吗· 子类继承父类· new的子类对象也就是父类的对象··
父类本身就是从子类中抽取出来的· 父类本身就是子类的一部分·
但是· 同时· 父类又是一个独立的类·即使你new 的是父类的对象·也没办法在它本身的类之外的类中直接掉用private修饰的属性不是吗!!!
作者: 郭嘉    时间: 2013-1-18 18:18
这应该不算是继承,A类中创建了private类型成员,而想要别的类访问,那必须要在A类中创建可以访问其中private类型的方法,而你上面的例子就是在子类中调用了父类中的方法来访问父类中的private成员,所以不是说子类继承父类中的包括private类在内的成员
你自己也说了,子类不能直接访问,而是要通过调用父类中的方法才能访问,所以这从本质来说并不是继承了父类的private成员

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




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