JAVA 多态操作----父类与子类转换问题实例分析

 更新时间:2020-05-21 10:56:12   作者:佚名   我要评论(0)

本文实例讲述了JAVA 多态操作----父类与子类转换问题。分享给大家供大家参考,具体如下:
JAVA语言中, 对象变量是多态的
每个子类对象都算是父类对象(子类对象可以当

本文实例讲述了JAVA 多态操作----父类与子类转换问题。分享给大家供大家参考,具体如下:

JAVA语言中, 对象变量是多态的

每个子类对象都算是父类对象(子类对象可以当作父类变量所引用)

那反过来可不可以呢?

答案是取决于父类变量引用的是谁

如果父类变量引用的是子类对象的实例, 可以通过强转被子类变量引用

如果父类变量引用的是父类对象的实例,则不能被为子类变量引用

上代码举例子(本篇一直用这两个类举例子,main测试不同):

一个Father类

package test;
 
public class Father 
{
	int fatherA;
	Father(int a)
	{
		fatherA=a;
	}
}

一个Son类

package test;
 
public class Son extends Father 
{
	int sonB;
	Son(int a,int b)
	{
		super(a);
		sonB=b;
	}
	
}

把子类对象赋给父类变量:

package test;
 
public class MainTest 
{
 
	public static void main(String[] args) 
	{
		Son son1=new Son(1, 2);
		Father father1=son1;	//子类对象被父类变量引用
		System.out.println(father1.fatherA);
	}
 
}

结果: 赋值成功!

把父类引用赋值给子类变量分两种情况:

1.父类引用的是子类对象:

package test;
 
public class MainTest 
{
 
	public static void main(String[] args) 
	{
		Father father2=new Son(1, 2);	//父类引用了子类对象的实例
		Son son2=(Son)father2;
		System.out.println(son2.sonB);
	}
 
}

结果:转换成功! 

 

这里注意即使引用的是子类实例转换成子类也需要强转, 否则会报错

2.父类引用的是父类的实例:

package test;
 
public class MainTest 
{
 
	public static void main(String[] args) 
	{
		Father father2=new Father(1);	//父类引用了子类对象的实例
		Son son2=(Son)father2;
		System.out.println(son2.sonB);
	}
 
}

结果:失败!

 

结论:

  • 子类对象可以当作父类对象使用(子类的引用可以赋值给父类变量),
  • 父类的引用如果是:
  1. 子类的实例,  可以通过强转赋值给子类引用
  2. 父类的实例, 不能被子类引用

其实细想new出的对象之间本身是不能转换的, 我们赋值的是类的引用, 

总的来说就是父类变量可以应用父类实例, 也可以引用子类实例,

子类变量只能引用子类实例

这也就是开篇所说的 : 子类对象算是父类对象

更多关于java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

您可能感兴趣的文章:

  • Java封装、继承、多态三大特征的理解
  • java用接口、多态、继承、类计算三角形和矩形周长及面积的方法
  • java中多态概念、实现原理详解
  • java中重载,继承,重写和多态的区别
  • Java面向对象编程(封装/继承/多态)实例解析
  • 关于Java三大特性之多态的总结
  • Java中子类调用父类构造方法的问题分析
  • 浅谈Java中父类与子类的加载顺序详解
  • Java中父类怎么调用子类的方法
  • java父类和子类初始化顺序的深入理解

相关文章

  • JAVA 多态操作----父类与子类转换问题实例分析

    JAVA 多态操作----父类与子类转换问题实例分析

    本文实例讲述了JAVA 多态操作----父类与子类转换问题。分享给大家供大家参考,具体如下: JAVA语言中, 对象变量是多态的 每个子类对象都算是父类对象(子类对象可以当
    2020-05-21
  • vue+Element中table表格实现可编辑(select下拉框)

    vue+Element中table表格实现可编辑(select下拉框)

    最近在工作中遇到一个问题,需要在表格中实现数据可编辑状态,具体情况是需要在单元格里加入下拉框;并且每个下拉框的数组数据是不一样的,具体是根据当前行前面数据
    2020-05-21
  • python 解决Fatal error in launcher:错误问题

    python 解决Fatal error in launcher:错误问题

    python终端用pip list出现这个错误Fatal error in launcher: 只要终端用到pip的东西,都在前面加python -m,比如python -m pip list 好了,完美解决! 补充知识:p
    2020-05-21
  • Python中的xlrd模块使用原理解析

    Python中的xlrd模块使用原理解析

    on里面的xlrd模块详解(一) - 疯了的小蜗 - 博客园【内容】:> 那我就一下面积个问题对xlrd模块进行学习一下: 什么是xlrd模块? 为什么使用xlrd模块? 1.什
    2020-05-21
  • django的403/404/500错误自定义页面的配置方式

    django的403/404/500错误自定义页面的配置方式

    要实现标题的功能,总共分四步: 1.创建html错误页 2.配置settings 3.编写视图 4.配置url 我的开发环境: django1.10.3 python2.7.12 前期工作 创建项目及app $ dj
    2020-05-21
  • Java IO字符流缓冲区实现原理解析

    Java IO字符流缓冲区实现原理解析

    字符流的缓冲区 缓冲区的出现,提高了对数据的读写效率,对应的类:BufferedWriter,BufferedReader 缓冲区要结合流才可以使用,缓冲区是在流的基础上对流的功能进行
    2020-05-21
  • Android 开发使用PopupWindow实现弹出警告框的复用类示例

    Android 开发使用PopupWindow实现弹出警告框的复用类示例

    本文实例讲述了Android 开发使用PopupWindow实现弹出警告框的复用类。分享给大家供大家参考,具体如下: Android开发中相信下图所示界面大家都不陌生,该种弹出框的
    2020-05-21
  • 浅谈React中组件逻辑复用的那些事儿

    浅谈React中组件逻辑复用的那些事儿

    基本每个开发者都需要考虑逻辑复用的问题,否则你的项目中将充斥着大量的重复代码。那么 React 是怎么复用组件逻辑的呢?本文将一一介绍 React 复用组件逻辑的几种方
    2020-05-21
  • Django 解决新建表删除后无法重新创建等问题

    Django 解决新建表删除后无法重新创建等问题

    起因 同步表的过程中,我手动将数据库中的一个表删除了,此时再去执行命令,发现不能再数据库中新建表了 修改了表结构以后执行python3 manage.py migrate 报错: No
    2020-05-21
  • Python使用re模块验证危险字符

    Python使用re模块验证危险字符

    re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有
    2020-05-21

最新评论