Java 中父类一定可以强转成子类吗??

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();
    }
}

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值