java程序解答

来源:百度知道 编辑:UC知道 时间:2024/06/07 17:45:49
class A
{
String s ="class: A";
}
class B extends A
{
String s ="class :B";
}
public class TypeV
{
public static void main(String arg[])
{
B b1 ,b2 =new B();
A a1,a2;
a1=(A)b2;
a2=b2;
System.out.println(a1.s);
System.out.println(a.s);
b1=(B)a1;
System.out.println(b1.s);
}
}

请问为什么运行结果会是
class:A
class:A
class:B
??????????????????

java中有个规定是:
父类 父类对象=(父类)子类对象,这个时候,父类对象具有父类的属性,而具有子类的方法。

首先你要理解 引用 跟 对象的关系
B b1 ,b2 =new B();
左边的 b2 是一个B类型的引用,右边才是对象

A a1,a2;
a1=(A)b2;
因为A是B的父类,所以A类型的引用可以指向B类型的对象,所以a1.s 实际上是输出的 b2 的属性