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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王大斌 中级黑马   /  2013-4-8 00:30  /  1610 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王大斌 于 2013-4-8 13:07 编辑

在java中,子类继承父类,但是父类中的private不能被访问,试问子类到底是继承了父类的private数据但是这些数据不能访问,还是压根就没有继承private数据

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

6 个回复

正序浏览
本帖最后由 杨玉辉 于 2013-4-9 10:11 编辑

继承的基本定义就可以认为是,子类具备父类的所有成员变量和成员函数,分两种情况:
1.成员变量
父类的私有成员变量,子类继承的是父类的属性,而并不是他的值

子类要访问父类的引用,可以通过   super.      来访问父类的成员变量的值,如果没有指定,默认情况下,访问的是 子类的成员 前面省略了 this.

2.成员函数

子类可以直接调用父类的成员函数,如果子类有与父类权限相同的成员函数,就得考虑参数列表了,相同的参数列表,就是覆盖;不同时,就是重载

class Fu{
   private String name;
   private int age;
  
   Fu(String name , int age){
        this.name = name ;
        this.age = age ;
   }
    public void show(){
         System.out.println(" Fu has show");
    }
    public String getName() {
            return name;
     }
    public void setName(String name) {
          this.name = name;
    }
    public int getAge() {
          return age;
    }
     public void setAge(int age) {
           this.age = age;
     }
}

class Zi extends Fu{
     private String hobby;
   
     Zi(String name, int age , String hobby){
             super(name,age);
             this.hobby = hobby;
      }
      public void method(){
              System.out.println("his father's name is:"+super.getName());  //   此时 想要 输出的 是zhangbaba,但是输出的是zhangsan,子类以继承的方式,将会赋给新的值,覆盖掉原有的内容,
              System.out.println("zi de name:"+getName());                     //默认情况下 this.name 输出 zhangsan 比较之后就会发现,此时的this.  和 supe. 指向的都是子类说继承之后的值
      }
}

class InhertanceDemo{
      public static void main(String[] args){
           
           Fu fu = new Fu("zhangbaba",50);
           Zi zi = new Zi("zhangsan",26,"basketball");
           zi.method();            
      }

原帖存在问题

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
楼上说的对.引用一下:子类继承了父类的所有内容,包括私有类型的内容,只不过子类没有权限访问而已,就像是父亲留给了儿子一个保险箱,但是没有留给儿子密码,保险箱是实实在在的留给儿子了!

补充一下,子类想要对私有访问 就只能通过父类提供的访问方式来进行访问.

就像父亲专门留了个管家给儿子,想要操作保险箱内的东西,就去找管家告诉管家怎么弄,但是儿子自身不可以动手.




父类就相当于蓝图,子类继承父类就是复制了一张蓝图出来然后加入了自己的东西.
蓝图中有一块东西被声明不许修改(private私有),只能通过蓝图中别的内容间接修改.(父类蓝图中提供的访问方式,子类继承的时候也复制过来了,子类可以用)

子类对蓝图怎么弄都是子类的事情了,跟父类基本上没有关系.因为子类的是复制的 原图还在父类那.子类的改动只是改动他的复制图.

但是有一个super方法,可以在复制之前发生作用.

怎么说呢.

在开始复制父类蓝图的时候,首先,子类先弄个空白的纸,然后对纸张内容进行构造(子类构造函数),但是构造之前,需要先将父类的构造拿过来,然后我才能进行我的构造,因为我对蓝图加入自己的改动是在父类蓝图的基础上.这里就是

子类构造函数中第一句代码就是个隐式的 super();是先调用父类的构造函数.


隐式的super();针对父类的构造函数是系统默认的情况,就是父类没有写构造函数,使用系统默认.如果父类有具体的构造函数,那么就需要手动在子类构造函数中,第一句就先调用super并且按照父类的构造函数的方式来写.


class Fu
{
  Fu(int x)                  //父类的构造函数,带参数,非系统默认构造函数
  {
     x=0;
  }
}

class Zi extends Fu
{
    Zi(int z)
    {
             super(int y);
            z=2;
            

}


子类就要先使用super并且传入参数调用父类构造函数,对我复制过来的蓝图进行父类的构造,然后我在用我自己的构造方式,在复制的蓝图上进行构造.

就相当于,我复制父类的蓝图,(设父类的图是白色的)复制的时候,系统问我,你是要蓝色的图还是要黑色的,还是要红色的,我说要蓝色的.然后系统就复制了父类的图,并涂上蓝色.
这里说的选择颜色就相当于上面传入的y参数.是你自己的选择.图拿到手后,我还想再蓝色外面包上红色的边框,然后就自己动手包边框,这里就相当于是子类
自己的构造函数,使用了z=2那个,然后从父类那复制图完成,子类自己开始玩了.
爱怎么玩就怎么玩,都和父类没关系了.

父类还是他原本的那个白色的图.











头懵懵的,看基础视频看的好困,
回答的肯定语句不通顺,例子举得肯定不好.

还望楼主海涵.

语言表达能力太差,就是说不好....


我可以补习语文了.








评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
子类继承了父类的所有内容,包括私有类型的内容,只不过子类没有权限访问而已,就像是父亲留给了儿子一个保险箱,但是没有留给儿子密码,保险箱是实实在在的留给儿子了!
回复 使用道具 举报
王大斌 来自手机 中级黑马 2013-4-8 00:57:05
板凳
郭彦君 发表于 2013-4-8 00:46  既然已经继承了父类,那子类里就有了父类中的方法,你在子类中调用任何方法都是子类内部的事儿了,跟父类就 ...

子类内部不是维护着一个父类对象,super()创建了父类对象不是吗?
回复 使用道具 举报
既然已经继承了父类,那子类里就有了父类中的方法,你在子类中调用任何方法都是子类内部的事儿了,跟父类就没什么关系了。
回复 使用道具 举报
继承就是把它拿过来,,自生就用了,而非只是使用引用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马