1 父类类型变量指向子类对象,不用强转:
如: Object a =new A();
public class SocketTest {
public static void main(String[]args)throws Exception{
Object a=new A();
}
}
class A {
}
2 父类类型的变量可以强转成子类类型的,但是有个前提:父类类型的变量必须首先指向该子类对象,否则不能直接强转
如:下面的代码就不可以强转,因为,父类类型的变量一开始并没有指向子类对象。
//示例1
public class SocketTest {
public static void main(String[]args)throws Exception{
A a=new A();
B b=(B)a;
}
}
class A {
}
class B extends A{
}
//示例2
public class SocketTest {
public static void main(String[]args)throws Exception{
Object obj=new Object();
A a=(A) obj; //不能强转
}
}
class A {
}
可以强转的示例:
//示例1
public class SocketTest {
public static void main(String[]args)throws Exception{
Object obj=new A();
A a=(A) obj; //可以强转
}
}
class A {
}
//示例2 ,克隆中的强转,示例深度复制
public class SocketTest {
public static void main(String[]args)throws Exception{
A a0=new A();
System.out.println(a0.b.num);
Object obj=a0.clone(); //a.clone()返回的是Object类型,此时obj指向子类对象
A a1=(A) obj; //可以强转
a1.b.num=20;
// A a1=(A) a0.clone();
a1.b = (B) a1.b.clone();
System.out.println(a0.b.num);
System.out.println(a1.b.num);
}
}
class A implements Cloneable {
B b=new B();
public Object clone() throws CloneNotSupportedException{
Object obj=super.clone();
A aNew=(A) obj;
aNew.b=(B)b.clone();
return obj;
}
}
class B implements Cloneable {
public int num=0;
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}