博客
关于我
8.JAVA-向上转型、向下转型
阅读量:438 次
发布时间:2019-03-06

本文共 2265 字,大约阅读时间需要 7 分钟。

父子对象之间的转换分为向上转型和向下转型两种类型,它们的区别和应用场景各有不同。

  • 向上转型:通过子类实例化父类对象,属于自动转换,适用于子类覆盖父类功能的场景。
  • 向下转型:通过父类实例化子类对象,属于强制转换,通常用于调用子类独有的方法。

1. 向上转型

向上转型的主要作用是通过子类实例化父类,从而实现功能的统一。以下是向上转型的示例:

class A {      public void print() {          System.out.println("A:print");      }  }  class B extends A {      public void print() {          System.out.println("B:print");      }  }  public class Test{      public static void main(String args[]) {          A a = new B();          a.print();      }  }

运行结果显示,向上转型后会调用子类的print方法,这是因为子类的方法覆盖了父类的方法。

向上转型的意义在于当需要统一不同子类对象调用某些方法时,可以通过向上转型实现方法的统一调用。

例如:

class A {      public void print() {          System.out.println("A:print");      }  }  class B extends A {      public void print() {          System.out.println("B:print");      }  }  class C extends B {      public void print() {          System.out.println("C:print");      }  }  public class Test{      public static void func(A a) {          a.print();      }      public static void main(String args[]) {          func(new B());          func(new C());      }  }

通过向上转型,函数可以统一处理不同子类的对象,简化了方法调用逻辑。

需要注意的是,向上转型只能调用父类或子类覆盖的方法,无法调用子类的私有方法。

2. 向下转型

向下转型是通过父类实例化子类对象,主要用于调用子类独有的方法。在Java中,向下转型需要使用instanceof操作符来确保转换的安全性。

A a = new B();  // 向上转型 (B类是A的子类)  a instanceof A; // 返回true  a instanceof B; // 返回true  a instanceof C; // 返回false

向下转型的示例:

class A {      public void print() {          System.out.println("A:print");      }  }  class B extends A {      public void print() {          System.out.println("B:print");      }      public void funcB() {          System.out.println("funcB");      }  }  class C extends A {      public void print() {          System.out.println("C:print");      }      public void funcC() {          System.out.println("funcC");      }  }  public class Test{      public static void func(A a) {          a.print();          if(a instanceof B) {              B b = (B)a;              b.funcB();          } else if(a instanceof C) {              C c = (C)a;              c.funcC();          }      }      public static void main(String args[]) {          func(new A());          func(new B());          func(new C());      }  }

通过向下转型,可以安全地调用子类的独有方法,从而实现功能的扩展和复用。

需要注意的是,向下转型在Java中是强制转换,可能会导致运行时错误,因此必须确保转换的安全性。

总之,向上转型和向下转型各有其适用的场景,理解两者的区别和应用方法是掌握Java面向对象特性的关键。

转载地址:http://xviyz.baihongyu.com/

你可能感兴趣的文章
OpenMCU(四):STM32F103启动汇编代码分析
查看>>
OpenMetadata 命令执行漏洞复现(CVE-2024-28255)
查看>>
OpenMMLab | AI玩家已上线!和InternLM解锁“谁是卧底”新玩法
查看>>
OpenMMLab | S4模型详解:应对长序列建模的有效方法
查看>>
OpenMMLab | 【全网首发】Llama 3 微调项目实践与教程(XTuner 版)
查看>>
OpenMMLab | 不是吧?这么好用的开源标注工具,竟然还有人不知道…
查看>>
OpenMMLab | 如何解决大模型长距离依赖问题?HiPPO 技术深度解析
查看>>
OpenMMLab | 面向多样应用需求,书生·浦语2.5开源超轻量、高性能多种参数版本
查看>>
OpenMP 线程互斥锁
查看>>
OpenMV入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
查看>>
OpenObserve云原生可观测平台本地Docker部署与远程访问实战教程
查看>>
openoffice使用总结001---版本匹配问题unknown document format for file: E:\apache-tomcat-8.5.23\webapps\ZcnsDms\
查看>>
views
查看>>
OpenPPL PPQ量化(2):离线静态量化 源码剖析
查看>>
OpenPPL PPQ量化(3):量化计算图的加载和预处理 源码剖析
查看>>