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; // 不安全

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 教你如何正确了解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

随机推荐