Java上转型和下转型对象

 更新时间:2018年03月01日 14:40:57   投稿:laozhang  
这篇文章给大家讲述了Java上转型和下转型对象的详细用法以及相关的代码分享,有兴趣的朋友可以学习下。

上转型对象:子类创建对象 并将这个对象引用赋值给父类的对象。

语法格式:Father f=new Son();

注意事项:

  1. 上转型对象是由子类创建的,但上转型对象会失去子类的一些属性和方法。
  2. 上转型对象调用方法时,就是调用子类继承和重写过的方法。而不会是新增的方法,也不是父类原有的方法。
  3. 上转型对象可以操纵父类原有的属性和功能,无论这些方法是否被重写。
  4. 上转型对象可以再强制转换到一个子类对象,强制转换过的对象具有子类所有属性和功能。

代码示例:

public class Shangz{ //父类
	int a=1;
	int b=2;
	void cal(){ //父类自己的方法
		System.out.println(a*b);
	}
	public static void main(String[] args) {
		Shangz s=new ShangzDemo();
		s.cal(); //上转型对象调用子类的方法
		s.err(); //报错,上转型对象失去了子类的属性
	}
}
class ShangzDemo extends Shangz{ //子类继承父类
	void cal(){ //子类重写父类的方法
		System.out.println(a+b);
	}
	void err(){ //子类自己的方法
		System.out.println(a/b);
	}
}

下转型对象:父类引用的对象转换为子类的类型(强制类型转换)。

语法格式:

Father f=new Son();

Son s=(Father)f;

错误语法:(编译不报错,运行报错)

Father f=new Father();

Son s=Son(f);

注意事项:

  1. 向下转型必须先向上转型,否则会发生异常。
  2. 下转型对象可以引用子类和父类的属性和方法。

代码例子:

public class Shangz{ //父类
	int a=1;
	int b=2;
	void cal(){ //父类自己的方法
		System.out.println(a*b);
	}
	public static void main(String[] args) {
		Shangz s=new ShangzDemo();
		ShangzDemo d=(ShangzDemo)s;
		d.cal(); //调用了父类的方法
		d.div(); //对象调用子类的方法
		
		Shangz serr=new Shangz();
		ShangzDemo derr=(ShangzDemo)serr;
		derr.cal(); //编译不报错,运行出现转换异常
	}
}
class ShangzDemo extends Shangz{ //子类继承父类
	void cal(){ //子类重写父类的方法
		System.out.println(a+b);
	}
	void div(){ //子类自己的方法
		System.out.println(a/b);
	}
}

最后:对象转型在泛型中使用较多。

相关文章

  • 微信支付java版本之JSAPI支付+发送模板消息

    微信支付java版本之JSAPI支付+发送模板消息

    这篇文章主要介绍了微信支付java版本之JSAPI支付,发送模板消息,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • SpringBoot3集成SLF4J+logback进行日志记录的实现

    SpringBoot3集成SLF4J+logback进行日志记录的实现

    本文主要介绍了SpringBoot3集成SLF4J+logback进行日志记录的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • SpringBoot3.x集成nacos并实现多环境配置的操作步骤

    SpringBoot3.x集成nacos并实现多环境配置的操作步骤

    本文详细介绍了如何在Springboot3.x中集成Nacos2.x版本,包括nacos的安装、配置更改,以及在集成过程中遇到的问题,如端口设置、依赖版本调整等,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2024-10-10
  • IDEA调试功能使用总结(step over/step into/force step into/step out)

    IDEA调试功能使用总结(step over/step into/force step into/step o

    本文主要介绍了IDEA调试功能使用总结(step over/step into/force step into/step out),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • Java实现LRU缓存算法的参考示例

    Java实现LRU缓存算法的参考示例

    这篇文章主要介绍了JAVA实现LRU缓存算法的参考示例,帮助大家根据需求实现算法,对大家的学习或工作有一定的参考价值,需要的朋友可以参考下
    2023-05-05
  • SpringBoot基于Redis实现短信登录的操作

    SpringBoot基于Redis实现短信登录的操作

    验证码登录是非常常见的一种登录方式,能够简化用户登录的过程,本文主要介绍了SpringBoot基于Redis实现短信登录的操作,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • mybatis注解如何实现对象批量更改

    mybatis注解如何实现对象批量更改

    这篇文章主要介绍了mybatis注解实现对象批量更改的方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • springboot swagger不显示接口的问题及解决

    springboot swagger不显示接口的问题及解决

    这篇文章主要介绍了springboot swagger不显示接口的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • 详解Java线程池是如何重复利用空闲线程的

    详解Java线程池是如何重复利用空闲线程的

    在Java开发中,经常需要创建线程去执行一些任务,实现起来也非常方便,此时,我们很自然会想到使用线程池来解决这个问题,文中给大家提到使用线程池的好处,对Java线程池空闲线程知识感兴趣的朋友一起看看吧
    2021-06-06
  • JAVA后端学习精华之网络通信项目进阶

    JAVA后端学习精华之网络通信项目进阶

    不同项目之间的通信方式分为,http、socket、webservice;其中socket通信的效率最高,youtube就采用的是原始的socket通信,他们信奉的原则是简单有效
    2021-09-09

最新评论