主题:为什么不是输出派生类的aaa
tgnian
[专家分:100] 发布于 2007-11-16 13:22:00
class SuperClass
{
String a="hello";
void test()
{
System.out.println(a);
}
}
public class SubClass extends SuperClass
{
String a="aaa";
public static void main (String args[])
{
SubClass bar=new SubClass();
bar.test();
System.out.println(bar.a);
}
}
为什么 //output: hello
// aaa
下面的程序能输出派生类的Square,为什么上面的不能输出派生类的aaa
public class Rectangle
{
String name;
double length;
double width;
public Rectangle(double _length,double _width)
{
name="Rectangle";
length=_length;
width=_width;
}
public void display()
{
System.out.println( name);
System.out.println( "length:"+length);
System.out.println( "width:"+width);
}
}
public class Square extends Rectangle
{
public Square(double _side)
{
super(_side,_side);
name="Square";
}
}
public class Test
{
public static void main(String args[])
{
Square square=new Square(4);
square.display();
}
}
回复列表 (共8个回复)
沙发
haoboy0817 [专家分:880] 发布于 2007-11-16 13:44:00
因为String a="hello";String a="aaa";
是两个不同的Strig对象,
而你调用父类的test()方法,而父类中的test方法输出的是父类中的String a="hello"
板凳
sjhlovejava [专家分:1690] 发布于 2007-11-16 14:13:00
你确定你的第一个程序和第二个程序思想和方法是一样的吗?
不防比较两个程序,看看差别在哪些地方,想想这些差别各有什么用.
3 楼
happyboy2007 [专家分:3900] 发布于 2007-11-16 17:17:00
你的子类并没有覆盖父类的方法test(),所以输出的仍然是父类属性a。
class SuperClass
{
String a="hello";
void test()
{
System.out.println(a);
}
}
class SubClass extends SuperClass
{
String a="aaa";
public static void main (String args[])
{
SubClass bar=new SubClass();
bar.test();
System.out.println(bar.a);
}
void test() //覆盖父类方法test()
{
System.out.println (a);
}
}
最后控制台输出
aaa
aaa
4 楼
tgnian [专家分:100] 发布于 2007-11-17 23:43:00
能否解释一下这三个有什么不同
class SuperClass
{
String a="hello";
void test()
{
System.out.println(a);
}
}
public class SubClass extends SuperClass
{
public SubClass()
{
a="aaa";
}
public static void main (String args[])
{
SubClass bar=new SubClass();
bar.test();
System.out.println(bar.a);
}
}
//output: hello
// aaa
/*
class SuperClass
{
String a="hello";
void test()
{
System.out.println(a);
}
}
public class SubClass extends SuperClass
{
public SubClass()
{
a="aaa";
}
public static void main (String args[])
{
SubClass bar=new SubClass();
bar.test();
System.out.println(bar.a);
}
}
//output: aaa
// aaa
*/
/*
class SuperClass
{
String a="hello";
void test()
{
System.out.println(a);
}
}
public class SubClass extends SuperClass
{
public SubClass()
{
String a="aaa";
}
public static void main (String args[])
{
SubClass bar=new SubClass();
bar.test();
System.out.println(bar.a);
}
}
//output: hello
// hello
*/
5 楼
sjhlovejava [专家分:1690] 发布于 2007-11-18 10:13:00
前面两个,没看出代码有什么不同也!!!
第三个的
public SubClass()
{
String a="aaa";
}
只是把 a 作为构造方法的局部变量,脱离了这构造方法,它就没用了,
也就说它跟SuperClass类的全局变量好毫不相干的.
6 楼
tgnian [专家分:100] 发布于 2007-11-20 00:03:00
sorry ,第一个应为
class SuperClass
{
String a="hello";
void test()
{
System.out.println(a);
}
}
public class SubClass extends SuperClass
{
String a="aaa";
public static void main (String args[])
{
SubClass bar=new SubClass();
bar.test();
System.out.println(bar.a);
}
}
//output: hello
// aaa
7 楼
tgnian [专家分:100] 发布于 2007-11-21 00:52:00
class SuperClass
{
String a="hello";
void test()
{
System.out.println(a);
}
}
public class SubClass extends SuperClass
{
String a="aaa";
public static void main (String args[])
{
SubClass bar=new SubClass();
bar.test();
System.out.println(bar.a);
}
}
不知道我提的问题对不对
在test()函数没覆盖前,在子类的内存中中有没有test()的内存 ,还是和父类共享一个test()
在test()函数没覆盖后,是不是在SubClass中只有String a=“aaa”,String a=“hello”,覆盖后(即子类自己定义的)test()的内存
8 楼
tgnian [专家分:100] 发布于 2007-11-23 01:06:00
class SuperClass
{
String a="hello";
void test()
{
System.out.println(a);
}
}
public class SubClass extends SuperClass
{
String a="aaa";
void test()
{
System.out.println(a);
}
public static void main (String args[])
{
SubClass bar=new SubClass();
bar.test();
System.out.println(bar.a);
}
}
不知道我提的问题对不对
在test()函数没覆盖前,在子类的内存中中有没有test()的内存 ,还是和父类共享一个test()
在test()函数没覆盖后,是不是在SubClass中只有String a=“aaa”,String a=“hello”,覆盖后(即子类自己定义的)test()的内存
我来回复