首先要明白一点向上转型和向下转型他们都是建立在继承的基础上。

一.向上转型

子类到父类的转换通常称作向上转型,通俗的说就是定义父类对象指向子类对象。

下面通过一个例子来深入理解向上转型.

//定义一个抽象的动物父类

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中的向上转型和向下转型的更多相关文章

  1. Java中的向上造型和向下造型等

    package com.study.oop.day01; /**  * 如果某个方法是静态 的,它的行为就不具有多态性  * @author LuHongGang  * @date 2017年6月5日 ...

  2. Java入门记(二):向上转型与向下转型

    在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转 ...

  3. Java转型(向上转型和向下转型)

    在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就 ...

  4. JavaSE(五)JAVA对象向上转型和向下转型

    今天做了一个测试的题目,发现自己还是很多问题没有静下心来做.很多问题是可以自己解决的但是自己一是没有读清题意,二是自己心里太急躁了.所以这个要自己应以为鉴! 对象的转型问题其实并不复杂,我们记住一句话 ...

  5. JAVA的向上转型和向下转型怎么理解呢?

    在定义中是子类向父类转型称为向上转型,父类向子类转型是向下转型(必须先向上转型过,才能向下转型), 但是在下面类定义后,我得到的结果却不同.求大佬解惑 class superclass{ public ...

  6. java 向上转型和向下转型

    学习向上转型和向下转型怎么用没多难,但是为什么那样用,我搞了很多次没弄明白.没弄明白的原因是平时学习时之看例子,而例子一般都比较简单,没有对象之间的调用,一般就是一个对象调用自己的方法. 首先看下怎么 ...

  7. 重新精读《Java 编程思想》系列之向上转型与向下转型

    前言 今天重读了一下向上转型与向下转型,有些新的体会,了解了向上转型的好处,及如何向下转型.在此分享给大家. 向上转型 向上转型是用来表现新类和基类之间的关系.在传统中,由导出类转型成基类,在继承图中 ...

  8. Java多态的向上转型和向下转型

    Java多态的向上转型和向下转型 向上转型:(子类转为父类,自动转型) 格式 :父类类型 变量名 = new 子类类型(); 注:子类赋值给父类,那这时这个父类就能调用子类的方法 向下转型:(父类转为 ...

  9. “全栈2019”Java第五十三章:向上转型和向下转型详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

随机推荐

  1. 优化Webstorm

    Webstorm这个编辑器还是很强大的,而且版本更新得快,支持最新的typescript,就是性能越来越低. 本文总结了一些优化Webstorm的有效方法,希望对大家有所帮助! 测试环境 Mac OS ...

  2. php 正则表达式捕获组与非捕获组

    熟练掌握正则表达式是每个程序员的基础要求,对于每个初学者来说会被正则表达式一连串字符弄得头晕眼花.博主便会如此,一直对正则表达式有种莫名的恐惧.近来看到另一位博友写的 <php正则表达式> ...

  3. [poj3666]Making the Grade(DP/左偏树)

    题目大意:给你一个序列a[1....n],让你求一个序列b[1....n],满足 bi =a && bc,则最小的调整可以是把b变成c. 所以归纳可知上面结论成立. dp[i][j] ...

  4. 23.C#Queryable的扩展方法(十二章12.1-12.2)

    今天要写的知识还真心有点绕呢,对于第一节的内容,其实是把原先在内存中的数据源,换成了从数据库中提取出来的数据.从代码的使用方式上是一样的,直接跳过,来看看IEnumerable和IQueryable的 ...

  5. 关于js的string的3个函数slice,substring,substr对比

    slice,substring,substr三个函数都是截取字符串,但是对参数的处理有区别 参数处理相似的两个函数式slice和substring slice(start,end)和substring ...

  6. c#中的protected和internal

    protected限制子类访问,可以跨程序集 internal 限制此程序集访问,可以跨类 protected internal 限制此程序集的子类中访问

  7. Bata版本冲刺计划及安排

    下一阶段需要改进完善的功能 UI: 1. 界面不够精细,布局不够美观并且尚有BUG没有解决,图形.色彩间不够协调. 2. 理清界面间的跳转逻辑. 搜索: 搜索成功并定位后,不会影响地理标签的显示. 定 ...

  8. Beta冲刺阶段

    Beta冲刺阶段 现阶段工作安排以及问题解决 Struts2框架配置 网上下载Struts 2 的框架代码,按照书上教程进行配置 遇到的问题:书上配置过程和实际操作有出入,按照书上过程无法完成配置过程 ...

  9. 拦路虎:jQuery

    1.   color设置无效的问题! $("#subscribe").hover(function(){ var $this = $("#subscribe .subsc ...

  10. java基础-关键字-native

     一. 什么是Native Method    简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由 ...