java 子类强转父类 父类强转子类
Java 继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
Java 子类强转父类
父类引用指向子类对象:
java中子类强转父类,实际上依然是子类;
该引用只能调用父类中定义的方法和变量;
如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;
// A是父类,B是子类 A a = new A(); a.setName("a1"); a.sayA(); // sayA B b = new B(); b.setName("b1"); b.setSex(true); b.sayA(); // sayA from B b.sayB(); // sayB// Java中的对象进行类型提升,依然保持其原有的类型。 A a2 = (A) b; // 子类强转父类,其实仍然是子类 System.out.println(a2.toString()); // B [name=b1, age=0, sex=true] // 该引用只能调用父类中定义的方法和变量; // a2.sayB(); // The method sayB() is undefined for the type A 报错 // 如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法; a2.sayA(); // sayA from B a2其实是B,调用的是B方法
Java 父类强转子类
只有父类对象本身就是用子类new出来的时候, 才可以在将来被强制转换为子类对象.
// B b2 = (B) a; // atest.A cannot be cast to atest.B a是A,转不成B // 只有父类对象本身就是用子类new出来的时候, 才可以在将来被强制转换为子类对象. B b2 = (B) a2; // a2其实是B,可以转成B System.out.println(b2.toString()); // B [name=b1, sex=true] b2.sayA(); // sayA from B b2.sayB(); // sayB
扩展:
对于list也是这样
List<A> aList = new ArrayList<A>(); aList.add(a); aList.add(b); for (A item : aList) {System.out.println(item.getClass() + ":" + item.toString());// class atest.A:A [name=a1]// class atest.B:B [name=b1, sex=true] }
附录:
public class A {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public void sayA() {System.out.println("sayA");}@Overridepublic String toString() {return "A [name=" + name + "]";}}public class B extends A {private boolean sex;public boolean isSex() {return sex;}public void setSex(boolean sex) {this.sex = sex;}@Overridepublic void sayA() {System.out.println("sayA from B");// super.sayA(); }public void sayB() {System.out.println("sayB");}@Overridepublic String toString() {return "B [name=" + this.getName() + ", sex=" + sex + "]";}}public static void main(String[] args) {// A是父类,B是子类A a = new A();a.setName("a1");a.sayA(); // sayA B b = new B();b.setName("b1");b.setSex(true);b.sayA(); // sayA from Bb.sayB(); // sayB// Java中的对象进行类型提升,依然保持其原有的类型。A a2 = (A) b; // 子类强转父类,其实仍然是子类System.out.println(a2.toString()); // B [name=b1, sex=true]// 该引用只能调用父类中定义的方法和变量; // a2.sayB(); // The method sayB() is undefined for the type A 报错// 如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;a2.sayA(); // sayA from B a2其实是B,调用的是B方法// B b2 = (B) a; // atest.A cannot be cast to atest.B a是A,转不成B// 只有父类对象本身就是用子类new出来的时候, 才可以在将来被强制转换为子类对象.B b2 = (B) a2; // a2其实是B,可以转成BSystem.out.println(b2.toString()); // B [name=b1, sex=true]b2.sayA(); // sayA from Bb2.sayB(); // sayB List<A> aList = new ArrayList<A>();aList.add(a);aList.add(b);for (A item : aList) {System.out.println(item.getClass() + ":" + item.toString());// class atest.A:A [name=a1]// class atest.B:B [name=b1, sex=true] }}
转载于:https://www.cnblogs.com/ooo0/p/9308583.html
java 子类强转父类 父类强转子类相关推荐
- java声明一个父类A,java 子类强转父类 父类强转子类
1.基本数据类型 基本数据类型: 子类可以强转成父类,因为小范围可以强转大范围,不会有数据丢失. 父类也可以强转成子类,但是因为大范围强转成小范围,所以会有数据丢失. 2.Java 继承 继承就是子类 ...
- 2020-12-16子类对象指针强转成父类对象指针,父类对象指针调用子类函数问题(待整理)
当父类中声明某个函数为虚函数,并且子类重载了这个虚函数以后,用父类对象的指针可以调用子类的相应函数,但前提是该指针指向的对象是子类的对象,否则没有意义. 1.新建一个子类对象时,它首先执行它父类的构造 ...
- 类型转换异常,父类不能强转换成子类
我们回到java角度上来, 总结一下: 1父对象=new 父类(); 2子对象=new 子类(); 3父对象=new 子类(); 4{ 父对象=new 子类(); 子对象=(子类)父对象; } 上述四 ...
- java 父类强制转换为子类_[java]Java中父类强制转换成子类的原则
Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用. 例: public class Test { public static void main(Str ...
- java 中普通类继承,抽象类继承,接口类继承,子类一定要重写父类中的方法吗
一.简单总结,需要重写的有 普通类继承抽象类,重写所有抽象类方法:(不包括普通方法) 普通类继承接口,重写所有接口方法.(不包括default关键字修饰的方法) 详解见下: 普通类继承,并非一定要重写 ...
- Java继承-子类不可以继承父类的构造方法
子类不可以继承父类的构造方法,只可以调用父类的构造方法. 子类中所有的构造函数都会默认访问父类中的空参数构造函数,这是因为子类的构造函数内第一行都有默认的super()语句. super()表示子类在 ...
- 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性
原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...
- Java 中子类是否只继承父类的非私有变量和方法?
今天在 CSDN 论坛中见到有人问在 Java 中子类是否只继承父类的非私有变量和方法(原贴在此).大部分跟贴都认为这句话是正确的,但是对于这个问题背后的本质理解却是错误的. 首先我们明确一下&quo ...
- java中子类与父类强制转换_java中父类强制转换成子类的错觉
引言:父类引用指向子类对象在java中十分常见,比如: Object object=new a();//a是一个类名 但是有时候我们看见子类引用指向了父类对象,就是上边的反过来,比如 图片中圈1标识的 ...
最新文章
- TensorRT 加速性能分析
- 不限制内存用桶排序PHP
- 我们应该使用什么指标来描述数据中心及其效率?
- 基数排序及其思想 C++代码实现及分析 恋上数据结构笔记
- 怎么调试EXC_BAD_ACCESS错误
- 微型计算机中被处理信息称为,2011海南省计算机等级考试试题 二级C试题考资料...
- shell脚本拼接中间带空格的两个变量成一个变量
- Spring mvc 返回json格式 - 龙企阁 - 博客频道 - CSDN.NET
- maven插件打包exec_Exec Maven插件–从Maven Build运行Java程序
- JDK的问题:用C启动虚拟机跟java运行结果有差异
- 快压下载|快压软件官方下载
- 熬夜爆肝!C++实现圣域之战!(修过码)
- 柳州铁一中机器人_柳州铁路第一中学的办学成果
- html5多媒体事件写法,多媒体元素重要事件 -HTML5
- 【PyQt5,2021最新Java常用开源库总结
- 5个PPT素材、模板网站,建议收藏~
- 将AE开发的专题图制作功能发布为WPS
- 独此一次的跨界工作坊众筹:泛产品经理X苏杰X金沙浪
- 关于并行计算的相关总结
- R语言使用lm函数构建具有交互项的回归模型、使用:号(冒号)表示变量的交互(冒号为纯乘法、不包含乘法的构成项)
热门文章
- 《Groovy官方指南》目录
- 浅谈Spring框架注解的用法分析
- Github系列之二:开源 一行代码实现多形式多动画的推送小红点WZLBadge(iOS)
- Octave中无法使用rgb2gray()函数
- 用matlab实现感知机学习算法,训练分类器并解决井字游戏
- 简明python教程 --C++程序员的视角(一):数值类型、字符串、运算符和控制流
- 程序员面试题精选100题(50)-树的子结构[数据结构]
- 使用WMI对象收集计算机信息
- 和Facebook竞争,社交平台Mico怎样在1年内获得3000万用户?
- iOS开发UI基础—手写控件,frame,center和bounds属性