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

 更新时间:2020年05月21日 09:49:23   作者:NO0b  
这篇文章主要介绍了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程序设计有所帮助。

相关文章

  • 解析阿里GTS开源版本fescar分布式事务

    解析阿里GTS开源版本fescar分布式事务

    这篇文章主要为大家介绍解析阿里GTS开源版本fescar分布式事务的原理及使用说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多进步
    2022-02-02
  • 详解Java抽象类与普通类的区别

    详解Java抽象类与普通类的区别

    今天给大家带来的是关于Java的相关知识,文章围绕着Java抽象类与普通类的区别展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • IntelliJ IDEA 代码运行时中文出现乱码问题及解决方法

    IntelliJ IDEA 代码运行时中文出现乱码问题及解决方法

    在我们刚接触到IDEA时,想美滋滋的敲一个“hello world”来问候这个世界,但难免会遇到这种问题乱码,这篇文章主要介绍了解决IntelliJ IDEA 代码运行时中文出现乱码问题,需要的朋友可以参考下
    2023-09-09
  • 详解Java注解知识点

    详解Java注解知识点

    这篇文章主要介绍了详解Java注解知识点,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-05-05
  • Java 内存分配深入理解

    Java 内存分配深入理解

    这篇文章主要介绍了Java 内存分配深入理解的相关资料,需要的朋友可以参考下
    2017-03-03
  • SpringBoot自动重启的两种方法

    SpringBoot自动重启的两种方法

    我们在项目开发阶段,可能经常会修改代码,修改完后就要重启Spring Boot,本文主要介绍了SpringBoot自动重启的两种方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 详解SpringBoot2.0的@Cacheable(Redis)缓存失效时间解决方案

    详解SpringBoot2.0的@Cacheable(Redis)缓存失效时间解决方案

    这篇文章主要介绍了详解SpringBoot2.0的@Cacheable(Redis)缓存失效时间解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 浅谈对Java双冒号::的理解

    浅谈对Java双冒号::的理解

    这篇文章主要介绍了浅谈对Java双冒号::的理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • 基于Spring BeanUtils的copyProperties方法使用及注意事项

    基于Spring BeanUtils的copyProperties方法使用及注意事项

    这篇文章主要介绍了基于Spring BeanUtils的copyProperties方法使用及注意事项,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • RocketMQ的顺序消费机制详解

    RocketMQ的顺序消费机制详解

    这篇文章主要介绍了RocketMQ的顺序消费机制详解,顺序消息是指对于一个指定的 Topic ,消息严格按照先进先出(FIFO)的原则进行消息发布和消费,即先发布的消息先消费,后发布的消息后消费,,需要的朋友可以参考下
    2023-10-10

最新评论