黑马程序员技术交流社区

标题: 关于多态的的一个小问题 [打印本页]

作者: Ci功    时间: 2015-9-26 16:20
标题: 关于多态的的一个小问题
  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. }
复制代码

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

作者: Ci功    时间: 2015-9-26 16:21
问题没有显示出来,补充下问题是:
上面代码的运行结果为:
null : 15
为什么不是:
huahua : 15

作者: Ci功    时间: 2015-9-26 17:33
a8336675 发表于 2015-9-26 17:06
public Zi(String name) {
       super(name);
}

原来是这样,明白了,
我现在理解了,原来非静态成员变量和非晶态的成员方法,是一样的,谢谢
作者: 雨中的泪    时间: 2015-9-27 13:09
同意楼上的说法 ,只是补充一句  在继承父类的name时要将父类的name实例化  this.name=name;
作者: orgcheng    时间: 2015-9-28 21:49
膜拜下。。。。看看给不给黑币

作者: 罗志辉    时间: 2015-10-1 10:30
我有不同看法哦   楼主你是想打印duotai的指向对吧?但是你调用的方法是子类中的方法,方法中的name和age各省略了一个this,那么由于实例对象是子类的,所以打印的这个name和age当然就是指的子类实例的属性了,所以是null和15,如果你想打印duotai所指向的name和age的话,你可以用这个
System.out.println(duotai.name);
System.out.println(duotai.age);
你会发现输出的是huahua 和 40 哦




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