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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class a
{
       private String name;
       private int age;
      a( String name,int age)
      {
              this.name=name;
              this.age=age;
      }
public void dy()
{
     System.out.println(name+age);
}
}

class b extends a
{
       private String name;
       private int age;

       private String jia;
       a( String name,int age,String jia)
      {
             super(name,age);                                   //这里不是已经在父类初始化了吗    就在这想不明白了................
            this.jia=jia;
      }

      public void dyy()
{
     System.out.println(name+age+jia);
}
}
class demo
{
    public static void main(String[] args)
   {
         b p=new b("小王",6,"黑马");
       p. dyy();                                    //问题在这           为什么打印出来的是 null 0 黑马 ? 转不过来弯了求解答
   }
}

评分

参与人数 1技术分 +1 收起 理由
天黑偷牛 + 1 加油

查看全部评分

16 个回复

倒序浏览
没人来解惑吗?在线等
回复 使用道具 举报
父类的私有成员,子类是无法继承的,所以子类中的name和age同父类中的name和age是不一样的
回复 使用道具 举报
b(string name,int age,string jia)
a(string name,int age)
回复 使用道具 举报
fantacyleo 发表于 2014-9-1 16:13
父类的私有成员,子类是无法继承的,所以子类中的name和age同父类中的name和age是不一样的 ...

那子类的成员在父类里初始化了啊 ,初始化完后子类的成员怎么会是空值呢?那我该如何调用呢
回复 使用道具 举报
空洞的望着窗外 发表于 2014-9-1 16:15
b(string name,int age,string jia)
a(string name,int age)

??????????????
回复 使用道具 举报
梦里听传说 发表于 2014-9-1 16:29
那子类的成员在父类里初始化了啊 ,初始化完后子类的成员怎么会是空值呢?那我该如何调用呢 ...

父类怎么可能去初始化子类特有的成员?这不是越俎代庖嘛。子类的成员当然是要子类自己初始化。或者,你把父类中想让子类继承的成员设置为protected,子类中就可以继承了
回复 使用道具 举报
fantacyleo 发表于 2014-9-1 16:36
父类怎么可能去初始化子类特有的成员?这不是越俎代庖嘛。子类的成员当然是要子类自己初始化。或者,你把 ...

那在子类构造函数内的子类成员怎么可以去父类初始化呢
回复 使用道具 举报
梦里听传说 发表于 2014-9-1 16:43
那在子类构造函数内的子类成员怎么可以去父类初始化呢

子类从父类继承下来的成员,可以交给父类去初始化,子类自己额外定义的成员,只能子类自己初始化
回复 使用道具 举报
梦里听传说 发表于 2014-9-1 16:43
那在子类构造函数内的子类成员怎么可以去父类初始化呢

子类从父类继承下来的成员,可以交给父类去初始化,子类自己额外定义的成员,只能子类自己初始化
回复 使用道具 举报
fantacyleo 发表于 2014-9-1 16:50
子类从父类继承下来的成员,可以交给父类去初始化,子类自己额外定义的成员,只能子类自己初始化 ...

问题就在这了,你看我的代码 为什么他能在父类初始化...初始化还不能用 郁闷 还编译运行通过了,我就这想不通 折腾一下午了
回复 使用道具 举报
父类私有的成员 子类是无法继承的,对吧,OK 子类私有的成员怎么可以调用父类的构造函数去初始化,那么初始化后应该可以调用,那怎么调用呢 还是我哪个地方专牛角尖了:Q
回复 使用道具 举报
呃呃呃呃呃呃的---------
回复 使用道具 举报
我是这样想的 目前来说是验证通过了

因为父类中的成员是私有的所以子类无法继承,但是可以用父类中的构造函数初始化,一旦父类中的成员变量被私有了,虽然子类可以利用父类的构造函数去初始化,但是因为无法继承也无法覆盖 所以子类的成员并没有得到值,只是初始化,所以子类中的该值为null 只要把父类中的私有去掉就可以了。(还是有点疑惑我在看一遍毕老师的继承视频吧)
下面是我的验证代码
class txt01
{
        public static void main(String[] args)
        {
                student p=new student("lishi",5,"henan");
        }
}
class person
{
        String name;
        int age;
        person(String name,int age)
        {
                this.age=age;
                this.name=name;
        }
        public void dy()
        {
                System.out.println(age+"::"+name);
        }
}
class student extends person
{
        private String name;
        private int age;
        private String jia;
        student(String name,int age,String jia)
        {
                super(name,age);
                this.jia=jia;
                System.out.println(name+":"+age+":"+jia);
        }
}
回复 使用道具 举报
梦里听传说 发表于 2014-9-1 16:55
父类私有的成员 子类是无法继承的,对吧,OK 子类私有的成员怎么可以调用父类的构造函数去初始化,那么初始 ...

不能被继承,不代表隐藏的成员在子类中无法访问。你调用父类的super(name,age),初始化的是父类的name和age,与子类无关,所以你打印出来的子类成员是只被默认初始化的结果
回复 使用道具 举报
fantacyleo 发表于 2014-9-1 18:17
不能被继承,不代表隐藏的成员在子类中无法访问。你调用父类的super(name,age),初始化的是父类的name和a ...

嗯 谢谢 :loveliness:
回复 使用道具 举报
父类私有成员无法被继承 父类进行了初始化和子类无关 子类赋值无效 所以打印出来的是父类初始化的值。而子类中进行初始化的值则可以被赋值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马