class A
{
String s= "class:A";
}
class B extends A
{
String s= "classB";
}
class TypeV{
public static void main(String args[]){
B b1,b2 = new B();
A a1,a2;
a1 = (A)b2;
a2 = b2;
System.out.println(a1.s);
System.out.println(a2.s);
b1 = (B)a1;
System.out.println(b1.s);
}
}程序运行结果:
class : A
class : A
class : B不明白的是,为什么在a2 = b2这样的赋值时,b2不会把其对类B的引用复制给a2,a2仍然指向自己类型?我想像中的结果因该是
class : B
class : B
class : A
{
String s= "class:A";
}
class B extends A
{
String s= "classB";
}
class TypeV{
public static void main(String args[]){
B b1,b2 = new B();
A a1,a2;
a1 = (A)b2;
a2 = b2;
System.out.println(a1.s);
System.out.println(a2.s);
b1 = (B)a1;
System.out.println(b1.s);
}
}程序运行结果:
class : A
class : A
class : B不明白的是,为什么在a2 = b2这样的赋值时,b2不会把其对类B的引用复制给a2,a2仍然指向自己类型?我想像中的结果因该是
class : B
class : B
class : A
a1 = (A)b2;
语句之后,b2就被强制类型转换为A类了
class A
{
String s= "class:A";
}
class B extends A
{
String s= "classB";
}
class TypeV{
public static void main(String args[]){
B b1,b2 = new B();
A a1,a2;
a1 = (A)b2;
a2 = b2;
System.out.println(a1.s);
System.out.println(a2.s);
b1 = (B)a1;
System.out.println(b1.s);
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
a1 = (A)b2; 这句其实和 a1=b2 是一样的
等价与 A a1=new b2(); 其中 B b2=new B();
class B extends A B是A的子类, a1=b2是利用子类代替父类进行定义,不用强制类型转换.
a2=b2同理。b1 = (B)a1; 这里a1是父类,b1是通过 B b1进行声明的,是子类,所以在用父类代替子类声明的时候必须进行强制类型转换,所以 (B)a1等价于 new B(new A);不知道你明白没.