本帖最后由 邱泉 于 2012-7-11 00:17 编辑
问题一:
我拿一个具体的例子来给你说明
class fu
{
int a=1;
int b=5;
public void method()
{
System.out.println(a); //在父类中查看a的值
}
}
class zi extends fu
{
int a=2;
public void method()
{
System.out.println(a); //在子类中查看a的值
}
public void supermethod()
{
System.out.println(super.a); //在子类中查看父类的a的值。
}
public void bmethod()
{
System.out.println(b); //在子类中访问在父类中定义,但在子类中没有定义的变量b
}
}
class DemoTest
{
public static void main(String[] args)
{
fu f = new fu();
zi z = new zi();
f.method();
z.method();
z.supermethod();
z.bmethod();
}
}
/*
输出结果:
1
2
1
5
*/
/*
说明:1.当子类中有和父类同名的成员变量a时,当用对象访问该变量a时,默认为this.a(默认情况下this是省略的),也就是说此时父类对象调用父类的a变量,子类对象调用子类的
a变量。
2.子类对象可以通过super.a的形式访问父类中的a变量。
3.若父类中定义的变量b,在子类中没有定义,那么子类对象访问b时,实际上访问的是父类中的b变量(也就是说b变量前默认添加了super关键字,即super.b)。
*/
问题二:
在创建子类的对象时,子类的构造函数会默认调用父类的无参数的构造函数。即代码实际上为以下形式:
class fu
{
fu()
{ int a=4;
System.out.println(a);
}
}
class zi extends fu
{
zi()
{
super(); //此处是系统隐式添加的,调用父类的无参数的构造函数。此处打印4
int a=5;
System.out.println(a); //此处打印5
}
}
class name
{
public static void main(String[] args)
{
zi x=new zi();
}
}
最后吐槽一下,技术分太难赚了...拼了
|