黑马程序员技术交流社区
标题:
关于多态的的一个小问题
[打印本页]
作者:
Ci功
时间:
2015-9-26 16:20
标题:
关于多态的的一个小问题
package practice;
public class DuoTaiDemo {
public static void main(String[] args) {
Fu duotai = new Zi("huahua");
duotai.show();
}
}
class Fu
{
String name;
static int age = 40;
public Fu(String name) {
this.name = name;
}
void show()
{
System.out.println(name+" :"+age);
}
static void older()
{
System.out.println("我"+age+"岁");
}
}
class Zi extends Fu
{
String name;
static int age = 15;
public Zi(String name) {
super(name);
}
void show()
{
System.out.println(name+" :"+age);
}
static void older()
{
System.out.println("我"+age+"岁");
}
}
复制代码
作者:
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