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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Ci功 中级黑马   /  2015-9-26 16:20  /  2921 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1黑马币
  1. package practice;

  2. public class DuoTaiDemo {
  3.         public static void main(String[] args) {
  4.                 Fu duotai = new Zi("huahua");
  5.                 duotai.show();
  6.         }

  7. }
  8. class Fu
  9. {
  10.         String name;
  11.         static int age = 40;
  12.         public Fu(String name) {
  13.                 this.name = name;
  14.         }
  15.         void show()
  16.         {
  17.                 System.out.println(name+" :"+age);
  18.         }
  19.         static void older()
  20.         {
  21.                 System.out.println("我"+age+"岁");
  22.         }
  23.        
  24. }
  25. class Zi extends Fu
  26. {
  27.        
  28.         String name;
  29.         static int age = 15;
  30.         public Zi(String name) {
  31.                 super(name);
  32.         }
  33.         void show()
  34.         {
  35.                 System.out.println(name+" :"+age);
  36.         }
  37.         static void older()
  38.         {
  39.                 System.out.println("我"+age+"岁");
  40.                
  41.         }
  42.        
  43. }
复制代码

最佳答案

查看完整内容

public Zi(String name) { super(name); } 上面这段代码中,你只调用了父类的构造函数,也就是仅仅给父类中的name赋值了; 而子类中又覆盖了父类中的属性name。 两种处理方式: 1、将子类中申明的name属性去掉; 2、在子类构造函数中加入this.name=name,即 public Zi(String name) { super(name); this.name=name; } ...

7 个回复

倒序浏览
public Zi(String name) {
       super(name);
}
上面这段代码中,你只调用了父类的构造函数,也就是仅仅给父类中的name赋值了;
而子类中又覆盖了父类中的属性name。
两种处理方式:
1、将子类中申明的name属性去掉;
2、在子类构造函数中加入this.name=name,即
public Zi(String name) {
       super(name);
       this.name=name;
}
回复 使用道具 举报
问题没有显示出来,补充下问题是:
上面代码的运行结果为:
null : 15
为什么不是:
huahua : 15
回复 使用道具 举报
a8336675 发表于 2015-9-26 17:06
public Zi(String name) {
       super(name);
}

原来是这样,明白了,
我现在理解了,原来非静态成员变量和非晶态的成员方法,是一样的,谢谢

点评

不客气。  发表于 2015-9-26 17:44
回复 使用道具 举报
同意楼上的说法 ,只是补充一句  在继承父类的name时要将父类的name实例化  this.name=name;
回复 使用道具 举报
膜拜下。。。。看看给不给黑币
回复 使用道具 举报
我有不同看法哦   楼主你是想打印duotai的指向对吧?但是你调用的方法是子类中的方法,方法中的name和age各省略了一个this,那么由于实例对象是子类的,所以打印的这个name和age当然就是指的子类实例的属性了,所以是null和15,如果你想打印duotai所指向的name和age的话,你可以用这个
System.out.println(duotai.name);
System.out.println(duotai.age);
你会发现输出的是huahua 和 40 哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马