Java 多态中继承的转型详解与用法分析

 更新时间:2021年10月26日 11:20:57   作者:执久呀  
继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为

一、前言

前面我们学习了多态的概述和使用,现在我们来学习前面剩下的转型问题。

二、转型

🗡 向上转型

🗡向下转型

为什么会有转型呢,前面我们也说到了,多态中的使用前提是有父类引用指向子类对象

还有多态的缺点就是不能访问子类对象。(可以用到向下转型访问)

向上转型

🗡其实多态中的父类引用指向子类对象就是向下转型,向下转型就是子到父。

就是将子类所申请的空间赋值给父类。形式: fu f=new zi();

向下转型

🗡向下转型的出现就是为了解决多态中无法访问子类成员的问题,其实向下转型本质上

就是强转,由父到子,父类对象转化为子类对象。形式:zi z= (zi)f ;

我们看个例子:

在fu类中

public class Fu {
  public   void show(){
        System.out.println("fu:1024程序员节");
    }
  public void play(){
      System.out.println("fu:1024不见不散");
    }
}

zi类中

public class Zi extends Fu {
    @Override
    public void show() {//重写fu类中的show方法
        super.show();
        System.out.println("zi:1024来了呀");
    }
    public void game(){
        System.out.println("zi:写篇博客提提神");
    }
    public void juan(){
        System.out.println("zi:全员卷王");
    }
}

新建一个测试类

public class FuZiDemo {
    public static void main(String[] args) {
        Fu f=new Zi();//向上转型
        Zi z=(Zi)f;//向下转型
        z.show();
        z.game();
        z.juan();
        z.play();
    }
}

通过向上和向下转型,此时我们可以访问子类父类全部成员

🗡 其实虽然直接创建子类对象是非常方便的,但是我们多态的实现条件之一就是有

父类引用指向子类对象(接口的多态暂时不考虑)

public class FuZiDemo {
    public static void main(String[] args) {
 
        Zi z=new Zi();//通过子类直接创建对象
        z.show();
        z.game();
        z.juan();
        z.play();
 
    }
}

🗡由上述结果可知,子类对象向上转型为父类对象是不需要显示转换,而父类对象转化

为子类对象时,需要显示强制类型转化。

友情提示:向下转型还有几点需要注意的地方:

🗡①必须保证父类对象是子类的一个实例,否则程序报错。

🗡②向下转型的对象可以访问父类中的成员和方法,也可以访问子类中的成员和方法。

public class Demo11 {
    public static void main(String[] args) {
     Animal a=new Dog();
      Dog g=(Dog)a;
     Cat c=(Cat)a;//??能否成功
 
    }
}

🗡上述代码中,父类对象a引用的是子类Dog对象,而不是Cat类对象,可以将a强

制转化为Dog类型,不能a强制转化为Cat类型,因为向下转型必须确保父类对象是

子类的一个实例所以这个程序不能成功,且在运行时会出现转换异常的警告。

三、instanceof运算符

instanceof的用处

🗡由上可知,向下转型必须确包父类对象是子类的一个实例,否则程序会异常,

instanceof 就是为了确保向下转型不出现异常。instanceof运算符用来在运行时

指出对象是否是特定类的一个实例

instanceof的使用格式:

🗡对象名 instanceof 类名

🗡instanceof返回一个布尔值来指出这个对象是否是这个特定类或者使他的子类的

一个实例。返回true则是,反之则不是。

public class Demo11 {
    public static void main(String[] args) {
     Animal a=new Dog();
    if(a instanceof Dog){
      Dog g=(Dog)a;
    }
      if( a instanceof Cat){//判断作用
        Cat c=(Cat)a;
      }
    }
}

🗡所以我们在进行向下转型之前采用instanceof运算符可以避免一些问题。

到此这篇关于Java 多态中继承的转型详解与用法分析的文章就介绍到这了,更多相关Java 多态中继承的转型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 汇编JVM编写jasmin程序的操作方法

    Java 汇编JVM编写jasmin程序的操作方法

    这篇文章主要介绍了Java 汇编JVM编写jasmin程序的操作方法,本文通过几个示例讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • Java实现文本查重的方法详解

    Java实现文本查重的方法详解

    Ansj 是一个开源的 Java 中文分词工具,基于中科院的 ictclas 中文分词算法,采用隐马尔科夫模型(HMM),比其他常用的开源分词工具(如 MMseg4j)的分词准确率更高,下面我们就来使用它实现文本查重功能吧
    2024-04-04
  • Spring Cloud分布式定时器之ShedLock的实现

    Spring Cloud分布式定时器之ShedLock的实现

    这篇文章主要介绍了Spring Cloud分布式定时器之ShedLock的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Java8 Predicate花样用法详解

    Java8 Predicate花样用法详解

    本文主要介绍了Java 8 Predicate花样用法详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 教你如何区分Spring与Structs2中间件

    教你如何区分Spring与Structs2中间件

    这篇文章主要介绍了教你如何区分Spring与Structs2中间件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • Java 分析并解决内存泄漏的实例

    Java 分析并解决内存泄漏的实例

    这篇文章主要介绍了Java 分析并解决内存泄漏的实例,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-08-08
  • Java concurrency之AtomicLongArray原子类_动力节点Java学院整理

    Java concurrency之AtomicLongArray原子类_动力节点Java学院整理

    这篇文章主要介绍了Java concurrency之AtomicLongArray原子类的相关知识,感兴趣的朋友参考下吧
    2017-06-06
  • springboot+mybatis报错找不到实体类的问题

    springboot+mybatis报错找不到实体类的问题

    这篇文章主要介绍了springboot+mybatis报错找不到实体类的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • JAVA Stack详细介绍和示例学习

    JAVA Stack详细介绍和示例学习

    JAVA Stack是栈。它的特性是:先进后出(FILO, First In Last Out)。
    2013-11-11
  • 利用ClasserLoader实现jar包加载并调用里面的方法

    利用ClasserLoader实现jar包加载并调用里面的方法

    classloader即是类加载,虚拟机把描述类的数据从class字节码文件加载到内存,并对数据进行检验、转换解析和初始化,了解java的类加载机制,可以快速解决运行时的各种加载问题并快速定位其背后的本质原因,本文介绍了如何利用ClasserLoader来实现jar包加载并调用里面的方法
    2024-09-09

最新评论