Java向上转型和向下转型的区别说明
目录
- 向上转型和向下转型的区别
- 1.代码实现
- 2.实现向下转型
- 3.此时执行程序
- 简单认识向上转型和向下转型
- 向上转型:父类引用指向子类对象
- 向下转型:子类引用指向父类对象
向上转型和向下转型的区别
前言:
- 向上转型:父类引用类型指向了子类的实例对象,此时无法使用子类里的成员变量以及方法。
- 向下转型:通过引用类型强转,恢复了子类的成员变量以及方法。
1.代码实现
可以发现,父类虽然指向了子类的实例对象,但是并不能调用子类对象的方法,编译器报错。此时我们可以看作被隐藏了,那么怎样才可以把被隐藏的方法放出来呢?此时就需要向下转型。
2.实现向下转型
将a强转为Son引用类型。
((Son)a).sleep(); //调用子类的sleep方法
3.此时执行程序
成功向下转型,那么这样有什么作用呢?
其实,无论是上转还是下转都是为了让类的使用范围和适用范围发生变化,以便操作不同范围的变量或者方法。
这样其实就是一个java的继承多态,利于程序扩展。
我们需要这种设计方式,才会写出更易维护、简洁的代码。
简单认识向上转型和向下转型
向上转型:父类引用指向子类对象
例如:子类student继承了父类person
Person person = new Student();
向上转型后的变化
关于方法:person可以调用子类和父类公用的方法(如果子类重写了父类的方法,则调用子类的方法),子类特有的方法无法调用。
关于属性: person可以调用父类的属性,不可以调用子类的属性。
向上转型的作用
减少一些重复的代码
对象实例化的时候可以根据不同需求实例化不同的对象
向下转型:子类引用指向父类对象
Father f=new Son() //先向上转型 Son s=(Son) f;//再进行向下转型,进行强制转换,子类引用s,父类引用f
向下转型的条件:先向上转型,再向下转型。没有经过向上转型,会提示编译错误。
向下转型后的变化
关于方法:可以调用子类的所有方法,和属性,类型转为子类
关于属性:调用的属性为子类的属性。
向下转型的作用:向上转型时 ,会遗失子类对象独有的其他方法;可以通过向下转型在重新转回。
这种转型可能存在转型失败地风险,因为父类地范围更广,如果不确定父类对象就是该子类的对象,不推荐使用向下转型。
Person person = new Student(); Teacher teacher = (Teacher) person; // 不安全
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
教你如何正确了解java三大特性!!!!
目录 继承与多态 一.包 二.继承 三:重载和重写 3.1重载(Overload) 3.2 重写 四:多态 4.1 多态的转型 4.2 instanceof 总结 继承与多态 本章讲解面向对象的三大特性:封装,继承,多态. 一.包 Java定义了一种名字空间,称之为包:package.一个类总是属于某个包,类名(比如Person)只是一个简写,真正的完整类名是 包名.类名.例如:apple 类放在包 banana 里面 完整类名是:banana.apple. 自定义包的语法: package<
-
Java 向上转型和向下转型的详解
Java 向上转型和向下转型的详解 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展. 向上转型:子类引用的对象转换为父类类型称为向上转型.通俗地说就是是将子类对象转为父类对象.此处父类对象可以是接口 向下转型:父类引用的对象转换为子类类型称为向下转型. 前者是一个向上转型,Animal dog 引用指向new Dog();子类对象当成父类对象,只能调用父类的成员,如果子
-
浅谈Java中向上造型向下造型和接口回调中的问题
最近回顾了一下java继承中的问题,下面贴代码: public class Base { protected String temp = "base"; public void fun(){ System.out.print("BASE fun()"); } public static void main(String[] args) { Base b =new Base();//实例化Base对象 b.fun(); //调用父类中fun()的方法 System.o
-
Java向上转型和向下转型实例解析
这篇文章主要介绍了Java向上转型和向下转型实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 学习向上转型和向下转型怎么用没多难,但是为什么那样用,我搞了很多次没弄明白.没弄明白的原因是平时学习时之看例子,而例子一般都比较简单,没有对象之间的调用,一般就是一个对象调用自己的方法. 首先看下怎么用转型. 要转型,首先要有继承.继承是面向对象语言中一个代码复用的机制,简单说就是子类继承了父类中的非私有属性和可以继承的方法,然后子类可以继续扩展
-
Java 向上转型和向下转型的详解
Java 向上转型和向下转型的详解 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展. 向上转型:子类引用的对象转换为父类类型称为向上转型.通俗地说就是是将子类对象转为父类对象.此处父类对象可以是接口 向下转型:父类引用的对象转换为子类类型称为向下转型. 前者是一个向上转型,Animal dog 引用指向new Dog();子类对象当成父类对象,只能调用父类的成员,如果子
-
Java向上转型和向下转型的区别说明
目录 向上转型和向下转型的区别 1.代码实现 2.实现向下转型 3.此时执行程序 简单认识向上转型和向下转型 向上转型:父类引用指向子类对象 向下转型:子类引用指向父类对象 向上转型和向下转型的区别 前言: 向上转型:父类引用类型指向了子类的实例对象,此时无法使用子类里的成员变量以及方法. 向下转型:通过引用类型强转,恢复了子类的成员变量以及方法. 1.代码实现 可以发现,父类虽然指向了子类的实例对象,但是并不能调用子类对象的方法,编译器报错.此时我们可以看作被隐藏了,那么怎样才可以把被隐藏的方
-
java向上转型与向下转型详解
本文实例为大家分享了java向上转型与向下转型的具体代码,供大家参考,具体内容如下 基础知识:Java中的继承机制使得一个类可以继承另一个类,继承的类称为子类,被继承的类称为父类.在一个子类被创建的时候,首先会在内存中创建一个父类对象,然后在父类对象外部放上子类独有的属性,两者合起来形成一个子类的对象,所以子类可以继承父类中所有的属性和方法,包括private修饰的属性和方法,但是子类只是拥有父类private修饰的属性和方法,却不能直接使用它,也就是无法直接访问到它(子类可以通过调用父类的pu
-
Java 转型(向上或向下转型)详解及简单实例
在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念"人".再例如,麻雀是鸟类的一种(鸟类的子类),而鸟类则是动物中的一种(动物的子类).我们现实中也经常这样说:麻雀是鸟.这两种说法实际上就是所谓的向上转型,通俗地说就是子类转型成父类.这也符合Java提倡的面向抽象编程思想.来看下面的代码: package a.b; publ
-
Java上转型和下转型对象
上转型对象:子类创建对象 并将这个对象引用赋值给父类的对象. 语法格式:Father f=new Son(); 注意事项: 上转型对象是由子类创建的,但上转型对象会失去子类的一些属性和方法. 上转型对象调用方法时,就是调用子类继承和重写过的方法.而不会是新增的方法,也不是父类原有的方法. 上转型对象可以操纵父类原有的属性和功能,无论这些方法是否被重写. 上转型对象可以再强制转换到一个子类对象,强制转换过的对象具有子类所有属性和功能. 代码示例: public class Shangz{ //父类
-
浅谈Java向下转型的意义
一开始学习 Java 时不重视向下转型.一直搞不清楚向下转型的意义和用途,不清楚其实就是不会,那开发的过程肯定也想不到用向下转型. 其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向上转型也比较好理解. 但是向下转型,会不会觉得很傻,我是要用子类实例对象,先是生成子类实例赋值给父类引用,在将父类引用向下强转给子类 引用,这不是多此一举吗?我不向上转型也不向下转型,直接用子类实例就行了. 我开始学习Java时也是这么想的,这误区导致我觉得向下转型就是没用的. 随着技术的提升,我在
-
java向下转型基础知识点及实例
1.概念 向下转型就是父类对象转成子类对象.我们把一个父类引用 Animal类型的引用 给了一个 Bird类型 的引用,这就是向下转型 2.格式 子类 子类对象=(子类)父类实例 3.注意 向下转型的时候一定要进行强制类型转换 4.实例 class Animal { public String name; public void eat() { System.out.println(this.name + " 正在吃"); } } class Cat extends Animal {
-
java向上转型发生的时机知识点详解
1.直接赋值 public static void main(String[] args) { //父类引用 引用了 子类引用所引用的对象 Animal animal = new Cat();;//向上转型 } 2.方法传参 把一个Cat的子类传给一个Animal类型的父类,这里也是能发生向上转型的. public class Test extends TestDemo { public static void func(Animal animal) { } public static void
随机推荐
- Backbone.js框架中Model与Collection的使用实例
- 使用JavaBean创建您的网上日历本(2)
- layer弹出层中H5播放器全屏出错的解决方法
- SQL Server 2008网络协议深入理解
- 深入理解javascript中return的作用
- Crack8 VBS整人脚本 你不说你爱我 就关机
- Javascript获取HTML静态页面参数传递值示例
- JS实现黑色风格的网页TAB选项卡效果代码
- python常见排序算法基础教程
- 仅IE不支持setTimeout/setInterval函数的第三个以上参数
- Python使用迭代器打印螺旋矩阵的思路及代码示例
- Android使用SwipeListView实现类似QQ的滑动删除效果
- C#实现农历日历的方法
- SQL Server实现用触发器捕获DML操作的会话信息【实例】
- PDO预处理语句PDOStatement对象使用总结
- 基于jQuery的弹出消息插件 DivAlert之旅(一)
- jquery通过select列表选择框对表格数据进行过滤示例
- javascript下判断一个对象是否具有指定名称的属性的的代码
- Android TimePicker 直接输入的问题解决方案
- Android 属性动画原理与DataBinding