/**
*(:~)super测试
*@author HongGangBai
*@version 1.0 2006-05-05
*/package cctv.java;public class TestSuper
{
String name = "父类的毛毛!";
public void f()
{
System.out.println("父类的方法!");
}
}
//***************************************
class Test1 extends TestSuper
{
public static void main(String[] args)
{
Test1 te = new Test1();
te.name = "子类中的毛毛!";
System.out.println(te.name);
te.f();
}
public void f()
{
System.out.println("子类改写的方法!");
System.out.println("super.name: "+super.name);
}}
//********************************
//上面的程序运行后结果是:
//子类中的毛毛!
//子类改写的方法!
//super.name:子类中的毛毛!
为什么最后一句不是输出:“super.name:父类的毛毛!”呢?
super不是指向父类吗? 在线等回答!谢谢!
*(:~)super测试
*@author HongGangBai
*@version 1.0 2006-05-05
*/package cctv.java;public class TestSuper
{
String name = "父类的毛毛!";
public void f()
{
System.out.println("父类的方法!");
}
}
//***************************************
class Test1 extends TestSuper
{
public static void main(String[] args)
{
Test1 te = new Test1();
te.name = "子类中的毛毛!";
System.out.println(te.name);
te.f();
}
public void f()
{
System.out.println("子类改写的方法!");
System.out.println("super.name: "+super.name);
}}
//********************************
//上面的程序运行后结果是:
//子类中的毛毛!
//子类改写的方法!
//super.name:子类中的毛毛!
为什么最后一句不是输出:“super.name:父类的毛毛!”呢?
super不是指向父类吗? 在线等回答!谢谢!
Test1 te = new Test1();
te.name = "子类中的毛毛!";
所以此时父类和子类的name属性是一样的.
上面的程序中并没有把父类的name属性值改变!这个我测试过!在main()方法中加:
TestSuper tt = new TestSuper();
System.out.println(tt.name);
输出的是父类的毛毛!
说明并没有把父类的name属性值改变!大家可以自己运行测试!
当我把上面的程序中的子类Test1中加了一行 String name = "无关的毛毛!";
也就是改成下面的程序,输出的结果super.name:父类的毛毛!就正确了,不知道做何解释??
难道是JDK的BUG?大家研究下跟SUN公司联系看看,呵呵~~
/**
*(:~)super测试
*@author HongGangBai
*@version 1.0 2006-05-05
*/package cctv.java;public class TestSuper11
{
String name = "父类的毛毛!";
public void f()
{
System.out.println("父类的方法!");
}
}
//***************************************class Test1 extends TestSuper11
{
String name = "无关的毛毛!";
public static void main(String[] args)
{
Test1 te = new Test1();
te.name = "子类中的毛毛!";
System.out.println(te.name);
te.f();
}
public void f()
{
System.out.println("子类改写的方法!");
System.out.println("super.name: "+super.name);
}}
TestSuper tt = new TestSuper();
System.out.println(tt.name);这是创建另一个对象了,一个新的对象,两个对象并不共享name变量而你下面所做的测试,因为你在子类中定义了一个name属性,它隐藏了父类的name属性,所以你调用super.name调用的是父类的name属性
而下面的就能?
在线等~谢谢!
当子类定义一个父类中已有的变量,它将隐藏父类的变量,也就是子类中此时包括两个变量,一个是子类自己定义的,一个来自父类
如你所举的例子,
String name = "父类的毛毛!"; //这是父类定义的name
在子类Test1中:
String name = "无关的毛毛!"; //这是子类定义的name,它将隐藏掉父类的name而方法就不同,如果子类定义了一个与父类一样的方法,它将覆写此方法
还有,TIJ是什么东西?我在哪能看到?谢谢!
还是不明白~
最上面的程序中~父类中有一个name;
子类继承父类,那子类中也就有了name属性~
我再实例一个对象te,修改te.name=“子类中的毛毛”,那父类的name还是‘父类的毛毛’啊~
super.name应该输出“父类的毛毛”啊~不明白怎么会输出“子类的毛毛”~谢谢~
问一下~java编程思想中在哪块能查到super?
谢谢~在线等~