java父类当子类_Java父类能够强转为子类吗

今天复习反射的时候,我凭印象写出了以下利用反射生成对象的代码:java

try {

Object objectBigCar = Class.forName( new BigCar().getClass().getName() ).newInstance();

BigCar bigCar2 = ( BigCar )objectBigCar;

bigCar2.setLength( 200 );

bigCar2.setWidth( 200 );

System.out.println( "length: " + bigCar2.getLength() + " width: " + bigCar2.getWidth() );

} catch ( Exception e ) {

e.printStackTrace();

}

其中将反射生成的objecet类型的引用——objectBigCar,强制转化为了BigCar类型的引用——bigCar2。当时写这行代码的时候产生了疑惑,Object能强制转换为BigCar吗?众所周知Object是全部类的父类。印象中子类便是父类,可是父类不是子类,因此父类不能强转为子类。我又仔细想了一下,原来初学的时候就产生过这个疑惑,并且解决了,看来仍是印象不深,因此决定今天记录下来。学习

首先我先定义了两个类:父类Car、子类BigCar。this

package com.zdz.test;

public class Car {

private int length;

private int width;

public int getLength() {

return length;

}

public void setLength(int length) {

this.length = length;

}

public int getWidth() {

return width;

}

public void setWidth(int width) {

this.width = width;

}

}

package com.zdz.test;

public class BigCar extends Car {

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

咱们来分状况讨论:spa

状况一:咱们模仿我上边反射的代码,写出以下代码,IDE没有提示语法错误,运行一下,控制台也没有报错,这是可行的!code

Car car = new BigCar();

BigCar bigCar = ( BigCar )car;

利用Java的多态特性:子类便是父类。咱们将父类型的引用指向子类型的实例,也就是说,虽然这是一个父类型的引用,可是这个父类引用指向是子类型的实例!这是关键!故此,咱们能够将一个父类型的引用强制转换成一个子类型的引用,由于,咱们只是从新让一个子类型的引用指向了一个子类型的实例,这是没毛病的,老铁们。对象

状况二:咱们这样写,IDE没有报语法错误,运行一下,报类型转换错误blog

Car car = new Car();

BigCar bigCar = ( BigCar )car;

83de6a6acfb8f121bfe1e8aec2048965.png

首先,咱们将一个父类型的引用指向一个父类型的实例,而后咱们进行强制转换,这个强制转换的含义是:让一个子类型的引用指向一个父类型的实例,这是不行的,为嘛?由于:父类不是子类。get

感悟:一句学习Java的同窗们众所周知的话:子类便是父类,父类不是子类。仍是须要细细品味的,哈哈哈。同时,回答任何问题时,注意分状况讨论,切忌一律而论。作人不要太绝对嘛!io

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值