You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码Sparrow spw= (Sparrow) new Bird();含义及子类继承父类属性疑问

问题解答

一、代码Sparrow spw= (Sparrow) new Bird();的含义与问题

这行代码试图将父类Bird的实例强制向下转型为子类Sparrow类型,但这种写法会直接抛出ClassCastException运行时异常。

原因很明确:子类Sparrow是Bird的一种,但父类Bird并不是Sparrow的一种。new Bird()创建的是纯粹的父类对象,内存里只有Bird类定义的属性和方法,完全没有Sparrow子类特有的成员,所以无法被安全转换成Sparrow类型。

合法的向下转型场景是先做向上转型(子类实例赋值给父类引用),再转回子类类型,比如:

Bird bird = new Sparrow(); // 向上转型,合法
Sparrow spw = (Sparrow) bird; // 向下转型,合法

二、Sparrow子类能否继承并使用Bird类的属性

作为Bird的子类,Sparrow默认会继承Bird中非private修饰的属性和方法:

  • public、protected修饰的属性,Sparrow实例可以直接访问使用;
  • default(无修饰符,包访问权限)的属性,只要Sparrow和Bird在同一个包下,也能直接访问;
  • private修饰的属性,Sparrow无法直接访问,但可以通过Bird类提供的getter/setter等公共方法间接操作这些属性。

内容的提问来源于stack exchange,提问作者Lohit Kumar Biswas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 20:10:30