Java中的向上转型和向下转型
首先要明白一点向上转型和向下转型他们都是建立在继承的基础上。
一.向上转型
子类到父类的转换通常称作向上转型,通俗的说就是定义父类对象指向子类对象。
下面通过一个例子来深入理解向上转型.
//定义一个抽象的动物父类
public abstract class Animal
{
public abstract void Play();//此处需注意抽象方法没有方法体
}
//定义一个狗狗类,继承自Animal
public class Dog extends Animal
{
//重写父类的Play方法
public void Play()
{
System.out.println("狗狗正在欢快的玩耍。。。。。");
}
//子类还有自己特有的eat方法
public void eat()
{
System.out.println("狗狗正在欢快的吃着。。。。。");
}
}
//测试类
public void Test
{
public static void main(String[] args) {
Animal animal=new Dog();//向上转型,父类对象指向子类对象
animal.Play();//能正常编译
animal.eat();//编译不通过,父类的引用无法调用子类特有的方法
}
}
从上面这个例子可以总结出自乐装换成父类时的规则:
01.将一个父类的引用指向一个子类对象,称为向上转型,自动进行类型转换。
02.通过父类引用变量调用的是子类覆盖或继承父类的方法,不是父类的方法。
03.通过父类引用变量无法调用子类特有的方法。
二.向下转型
上面已经说到,当向上转型发生后,将无法调用子类特有的方法。但是当需要调用子类特有的方法时,可以通过将父类在转换为子类来实现。
向下转型:将一个指向子类对象的父类引用赋给一个子类的引用,称为向下转型。注意:必须进行强制类型转换。
//定义一个抽象的动物父类
public abstract class Animal
{
public abstract void Play();//此处需注意抽象方法没有方法体
}
//定义一个狗狗类,继承自Animal
public class Dog extends Animal
{
}
//定义猫类,继承自Animal
public class Cat extends Animal
{
}
public class Test
{
Animal animal=new Dog();
Dog dog=(Dog)animal;//向下转型,强制转换为狗狗对象
Cat cat=(Cat)animal;//运行出错
}
向下转型:转型时转的类型必须是父类对象所指的真实子类对象,不是任意的强制类型转换。
最后总结一下吧!
1、父类引用可以指向子类对象,子类引用不能指向父类对象。
2、把子类对象直接赋给父类引用叫向上转型,向上转型不用强制转型。
3、把指向子类对象的父类引用赋给子类引用叫向下转型,要强制转型。
4、向上转型会丢失子类特有的方法,但是子类overriding 父类的方法,子类方法有效
5、向上转型的作用,减少重复代码,父类做为参数,调用时子类作为参数,就是利用了向上转型。这样使代码变得简洁。体现了JAVA的抽象面向对象编程。
Java中的向上转型和向下转型的更多相关文章
- Java中的向上造型和向下造型等
package com.study.oop.day01; /** * 如果某个方法是静态 的,它的行为就不具有多态性 * @author LuHongGang * @date 2017年6月5日 ...
- Java入门记(二):向上转型与向下转型
在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转 ...
- Java转型(向上转型和向下转型)
在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就 ...
- JavaSE(五)JAVA对象向上转型和向下转型
今天做了一个测试的题目,发现自己还是很多问题没有静下心来做.很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了.所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话 ...
- JAVA的向上转型和向下转型怎么理解呢?
在定义中是子类向父类转型称为向上转型,父类向子类转型是向下转型(必须先向上转型过,才能向下转型), 但是在下面类定义后,我得到的结果却不同.求大佬解惑 class superclass{ public ...
- java 向上转型和向下转型
学习向上转型和向下转型怎么用没多难,但是为什么那样用,我搞了很多次没弄明白.没弄明白的原因是平时学习时之看例子,而例子一般都比较简单,没有对象之间的调用,一般就是一个对象调用自己的方法. 首先看下怎么 ...
- 重新精读《Java 编程思想》系列之向上转型与向下转型
前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中 ...
- Java多态的向上转型和向下转型
Java多态的向上转型和向下转型 向上转型:(子类转为父类,自动转型) 格式 :父类类型 变量名 = new 子类类型(); 注:子类赋值给父类,那这时这个父类就能调用子类的方法 向下转型:(父类转为 ...
- “全栈2019”Java第五十三章:向上转型和向下转型详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- 关于 iOS 10 中 ATS / HTTPS /2017 问题
本文于 2016 年 11 月 28 日按照 Apple 最新的文档和 Xcode 8 中的表现进行了部分更新. WWDC 15 提出的 ATS (App Transport Security) 是 ...
- html5 canvas 粒子特效
不知不觉就已经好久没写过博客了,自从七月正式毕业后,离开了实习了将近九个月的老东家,进了鼠厂后,做的事都是比较传统的前端活,之前在tpy的时候只管做移动h5的特效以及小游戏,再加上实习所以时间比较充裕 ...
- 分享:大晚上用自己的锤子手机跨系统刷MIUI,跌宕起伏啊!!
序言: 写这篇博客之前问了一下博客园官方,能不能写关于刷机这一方面的,官方还是比较通情达理的,说技术类没有限制的,那样我就放心的写了.今天早上在博客园中稍微逛了一下,感觉似乎很少有关于刷机这一方面的, ...
- java <? super Fruit>与<? extends Fruit>
package Test2016; import java.util.ArrayList; import java.util.List; public class Test2016 { public ...
- iOS 自定义控件开发(上)
工作需要,最近在进行iOS方面的图表工作.找了很多第三方库都无法实现效果,所以决定自己写一个控件. <iOS 自定义控件开发(上)> <iOS 自定义控件开发(中)> #0 目 ...
- Object C学习笔记19-枚举
一. 枚举类型 枚举类型是一个基本类型,不能再分为为任何其他的类型.在一般的编程语言中都有枚举(enum)这种数据结构类型.枚举类型主要用于将一个变量限定在特定的范围内.比如一周有七天,那么一周的值就 ...
- 程序员的出路在哪里?挣钱的机会来了续-福利来了,仿QQ界面,放出全部源码,打造创业框架及实现思路
上一篇:程序员的出路在哪里?挣钱的机会来了!, 原来搞技术,挣钱,不一定非得要多高精尖,有时候抓住小白用户,解决他们一个很小但是很常用的功能,也是一条很好的出路. 其实很多软件产品,要实现出来没有你想 ...
- 文件夹文件遍历并插入数据库的操作,IO Directory File的递归操作
在我们管理内容管理系统时,数据量大时,对机器的依赖性就比较强了,比如,我要将一个文件夹中的很多图片上传到网站,一个个上传会很花时间,就想到了通过遍历文件夹得到文件名,并将路径与文件保存到数据库中对应的 ...
- [USACO2004][poj2373]Dividing the Path(DP+单调队列)
http://poj.org/problem?id=2373 题意:一条直线分割成N(<=25000)块田,有一群奶牛会在其固定区域吃草,每1把雨伞可以遮住向左右延伸各A到B的区域,一只奶牛吃草 ...
- linux 查看服务器性能常用命令
一.top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来 ...