黑马程序员技术交流社区
标题:
复习到继承,问题不断,又有一个小问题。。。
[打印本页]
作者:
魏亮
时间:
2012-9-6 21:23
标题:
复习到继承,问题不断,又有一个小问题。。。
class DuotaiDemo4
{
public static void main(String[] args)
{
People p = new People(" nokia asha");
p.show();
}
}
class God
{
private String name;
God(String name)
{
this.name = name;
}
void show()
{
System.out.println(name);
}
}
class People extends God
{
People(String name)
{
super(name);
}
void show()
{
super.show();
}
}
我用子类show方法覆盖了父类的show方法,再调用应该父类的应该报错呀??怎么结果还是 nokia asha 呢?
还是不懂这些方法在内存中的状态。。。求指教
作者:
舒远
时间:
2012-9-6 21:32
子类构造器调用了super(name),那么就会执行
God(String name)
{
this.name = name;//这里将name的值赋给了成员变量,而且此时的this指向的是子类对象。this指向的具体哪个对象这点很重要。
}
最终打印的是子类的成员变量name
作者:
张飞年
时间:
2012-9-6 22:17
本帖最后由 张飞年 于 2012-9-6 22:19 编辑
如图、、、
捕获.PNG
(66.1 KB, 下载次数: 21)
下载附件
2012-9-6 22:18 上传
作者:
吴通
时间:
2012-9-6 22:50
楼主:你创建的子类的show方法想覆盖父类中的方法,但是方法主体还是父类的方法
所以和直接集成父类方法效果一样。
而你子类的构造函数中第一句隐含了一条super()语句,但是父类中没有God()构造
函数,只有God(String name)构造函数,所以子类要写super(name)语句覆盖掉
作者:
范泰洋
时间:
2012-9-6 23:15
class DuotaiDemo4
{
public static void main(String[] args)
{
People p = new People(" nokia asha");//1.首先主函数先进栈,并且有一个局部变量p,然后在堆内存中开辟空间,创建了一个带实际参数的对象,并把地址值赋值给了p
p.show();//4子类对象调用show方法
}
}
class God
{
private String name;
God(String name)//3在第二步里面有解释了。
{
this.name = name;
}
void show()//最后打印输出父类的name。
{
System.out.println(name);
}
}
class People extends God
{
People(String name)//2.子类对象找到了相对应的构造函数进行初始化时,然而发先方法体执行的是一个带参数的super语句,这时就会到父类去找相对应的构造函数进行初始化,方法体里面是
this.name = name;这个this关键字就是那个对象调用它,它就代表的就是谁,这时是子类对象调用的,这时就是父类指向了子类对象,这时父类name就赋值为了 nokia asha
{
super(name);
}
void show()//5show方法里面是调用父类的show方法
{
super.show();
}
}
我用子类show方法覆盖了父类的show方法,再调用应该父类的应该报错呀??怎么结果还是 nokia asha 呢?
还是不懂这些方法在内存中的状态。。。求指教
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2