黑马程序员技术交流社区
标题:
急!!!!!!!
[打印本页]
作者:
全海波
时间:
2012-7-13 19:25
标题:
急!!!!!!!
本帖最后由 全海波 于 2012-8-4 09:43 编辑
class FuZi
{
public static void main(String[] args)
{
Zi z = new Zi();
z.function();
//z.show();
//Fu f = new Zi();
//f.show();
//f.function();
}
}
class Fu
{
void show()
{
System.out.println("fu show");
}
}
class Zi extends Fu
{
void function()
{
super.show();
this.show();
}
void show()
{
System.out.println("zi show");
}
}
为何super与this可同存呢?
复制代码
作者:
黑马振鹏
时间:
2012-7-13 19:30
一个是子类的引用,一个是父类引用
作者:
全海波
时间:
2012-7-13 19:45
这个我知道呀,不是说不能同时出现super与this吗?有super就不能有this,反之亦然
作者:
王飞
时间:
2012-7-13 20:05
在--------构造函数-------里面this()和super()二者只能有其一。
this和super用法几乎一样,this.代表的是本类引用,this()调用的是本类的构造方法,而super.代表的是父类引用,sper()调用的是父类的构造方法
帅哥是构造函数哦 你的这个
void function()
{
super.show();
this.show();
}
不是构造方法 当然可以用哦
作者:
全海波
时间:
2012-7-13 20:12
忽略了!
作者:
汤密奕
时间:
2012-7-13 20:19
不能同存是指的构造方法,new一个对象时都会调用与之对应的构造方法,假如有以下代码,(this和super共存了)
class Person
{
String name = null;
int age = 0;
Person()
{}
}
class Student extends Person
{
String name = null;
int age = 0;
Student()
{
super();
this();
}
}
当new Student();时调用的是student的构造方法,super()又调用父类的构造方法,然后执行this(),调用的是studnet的构造方法,等于又执行了一次父类的构造方法,然后又要this(),如此程序就不断循环调用子父类的构造方法,这样编译就不能通过。
而super.show();this.show();只是调用父类和子类的show()方法,不存在上面所述的问题。
作者:
陈冲
时间:
2012-7-13 20:21
本帖最后由 陈冲 于 2012-7-13 20:25 编辑
void function()
{
super.show();
this.show();
}
如果父类中没有定义空参数构造函数,那么子类的构造函数必须用super明确要调用父类中的哪个构造函数,
同时子类构造函数中如果使用了this调用了本类构造函数时,那么super()就没有了,因为super和this都只能定义在第一行,
所以只能有一个,但是可以保证的是,子类中肯定会有其他的构造函数防伪父类的构造函数。
这里的show()方法不在构造函数内部,所以可以存在父类、子类的不同调用
作者:
李俊伟
时间:
2012-7-13 20:23
你这只是一般的继承函数调用,你函数中的super.show();是调用父类的show()方法。this.show()是调用子类的show()方法。如果你在子类中这样写构造函数:
Zi(int xx)
{
super();
this();
}
这样就会编译报错了。
子类的构造函数如果要引用super的话,必须把super放在函数的首位。(这里引用的是构造函数)
同样,子类的构造函数如果要引用thisr的话(即本类中的其他构造函数),必须把this放在函数的首位。
在一个构造函数中this、super的构造函数引用是不能同时存在的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2