class ExtendsDemo
{
public static void main (String args[])
{
SonClass s = new SonClass();
s.show();
System.out.println(s.name);
}
}
class FatherClass
{
String name = "china";
public void show()
{
System.out.println(this.name);
}
}
class SonClass extends FatherClass
{
String name = "beijing";
}
/*
只要创建一个类的实例对象时,都会有一个默认的引用指向这个类本身,也就是this。
你上面的FatherClass中的this就是它本类的一个引用,
FatherClass中定义的name属性,只是属于本类的一个属性,
因此,本类的引用(this)当然只会调用本类的属性。
所以当你调用时会打印出FatherClass的内容。
super指的是父类的一个引用。以下是实验代码:
class FatherClass {
public int value;
public void f() {
value = 100;
System.out.println
("FatherClass.value:"+this.value);
}
}
class ChildClass extends FatherClass {
public int value;
public void f() {
super.f();
value = 200;
System.out.println
("ChildClass.value="+this.value);
System.out.println(super.value);
}
}
public class TestInherit {
public static void main(String[] args) {
ChildClass cc = new ChildClass();
cc.f();
}
}
打印结果:
FatherClass.value:100
ChildClass.value=200
100
可以发现当调用子类中的f()方法时,通过super.f()调用了父类中f()方法.
而this.value打印的是各自类中的属性值。作者: 陈丽莉 时间: 2013-1-8 14:51
因为父类中的show方法并没有传递参数,继承类执行时,同名变量优先找父类中的调用,而函数优先找子类中的执行,所以输出的是china和beijing。若要输出子类中名字,可以将show方法改为有参数并输出传入的参数的方法。下面为修改后的代码,已测试。
class Demo
{
public static void main (String args
[])
{
SonClass s = new SonClass();
s.show(s.name);
System.out.println(s.name);
}
}
class FatherClass
{
String name = "china";
public void show(String name)//改为有参数的方法
{
System.out.println(name);//若此处为this.name则输出仍未china;
}
}
class SonClass extends FatherClass
{
String name = "beijing";
}