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第 ...
随机推荐
- 发布HTML5 RTS游戏-古代战争
古代战争 游戏介绍 "古代战争"是一个2.5D即时战略游戏,使用了帝国时代2的素材,并参考了它的游戏设计和玩法. 游戏基于YEngine2D引擎开发,具备生产.建造.资源采集.战斗 ...
- 如何用Android Studio打多包名APK
问题:项目中不同的分发渠道可能需要打包多种APK(同样的代码),包名可能是不一样的,如果一个一个修改包名重新编apk是很麻烦,可以参考下列步骤在Android Studio上操纵Gradle来打包不同 ...
- SQL 内置排名函数 DENSE_RANK
求排名前五的数据信息: 实现一: select distinct top 5 Id,Title,sort from content order by sort DESC 实现二: select * f ...
- nginx 配置虚拟主机
文章转载自:http://www.ttlsa.com/html/1571.html 上篇说道我们的nginx是安装在/usr/local/nginx/ cd conf 我们现在把所有的虚拟主机放在一个 ...
- python 元祖(tuple)
元祖和列表几乎相同,但是元祖一旦初始化是不可变更内容的 元祖的表示方式是caassmates=(), 要记住所有列表能用的.元祖都能用,但是就是不能变内容 注:记住,在python中的元祖,为了引起不 ...
- iOS开发小技巧--初始化项目中修改APP安装后的名称
- baidu时光轴_使用window.scroll实现的
<!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...
- 【poj1067】 取石子游戏
http://poj.org/problem?id=1067 (题目链接) 题意 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走 ...
- bzoj1670 Usaco2006 Building the Moat护城河的挖掘 [凸包模板题]
Description 为了防止口渴的食蚁兽进入他的农场,Farmer John决定在他的农场周围挖一条护城河.农场里一共有N(8<=N<=5,000)股泉水,并且,护城河总是笔直地连接在 ...
- HackerRank Ice Cream Parlor
传送门 Ice Cream Parlor Authored by dheeraj on Mar 21 2013 Problem Statement Sunny and Johnny together ...