Java中向上转型和向下转型有何区别与详细解析?

2026-05-24 03:241阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1021个文字,预计阅读时间需要5分钟。

Java中向上转型和向下转型有何区别与详细解析?

Java中的向上转型是基于Java的多态特性之一,转型指的是将子类对象转换为其父类类型。需要注意的是,转型的前提是方法覆盖和转型操作:方法覆盖+转型。

向上转型示例:java[自动,90%] 对象的向上转型:父类 + 父类对象=子类实例

Java之所以可以向上向下转型是依据Java三大特性之一的多态性,而转型就是对象的多态性,需要注意的是转型的前提是方法覆写

转型:

[自动,90%] (1)对象的向上转型:父类 父类对象 = 子类实例

[强制,1%] (2)对象的向下转型:子类 子类对象 = (子类) 父类实例

观察向上转型

package TestOverride;   /**  * Author:weiwei  * description:向上转型  * Creat:2019/3/29  **/   class Person{     public void print(){         System.out.println("1.我是爸爸!");     } } class Student extends Person{     public void print(){         System.out.println("2.我是儿子!");     } } public class Test {     public static void main(String[] args) {         Person per = new Student();//向上转型         per.print();     } }

运行结果:

2.我是儿子!

Process finished with exit code 0

运行结果只打印了子类print方法的内容,因为向上转型将子类对象变为父类对象,调用了子类的print方法

向下转型指的是将父类对象变为子类对象,但在这之前我们需要明确:为什么我们需要向下转型?当你需要子类扩
充操作的时候就要采用向下转型

观察向下转型(存在安全隐患)

package TestOverride;   /**  * Author:weiwei  * description:向下转型  * Creat:2019/3/29  **/   class Person{     public void print(){         System.out.println("1.我是爸爸!");     } } class Student extends Person{     public void print(){         System.out.println("2.我是儿子!");     }     public void fun(){         System.out.println("只有儿子有!");     } } public class Test {     public static void main(String[] args) {         Person per = new Person();         per.print();         //这个时候父类能够调用的方法都是本类定义好的方法         //所以并没有Student类中的fun()方法,那么只能够进行向下转型处理         Student stu = (Student) per;         stu.fun();     } }

并不是所有的父类对象都可以向下转型,如果要想进行向下操作之前,一定要首先发生向上转型,否则在转型时会出现 ClassCastException 。
观察错误转型

Person per = new Person(); //父类对象 Student stu = (Student) per; //强转

如果向下转型存在安全隐患,那么如何转型才靠谱呢?最好的做法就是先进行判断,而后在进行转型,那么就可以依instanceo关键字实现,该关键字语法如下:

Java中向上转型和向下转型有何区别与详细解析?

子类对象 instanceof类,返回boolean类型

观察instanceof操作

Person per = new Student();         System.out.println(per instanceof Person);         System.out.println(per instanceof Student);         if (per instanceof Student) { //避免ClassCastException            Student stu = (Student) per ;            stu.fun();        }

这种转换到底有什么意义?

要求定义一个方法,这个方法可以接收Person类的所有子类实例,并调用Person类的方法。

package TestOverride;   /**  * Author:weiwei  * description:向下转型  * Creat:2019/3/29  **/   class Person{     public void print(){         System.out.println("1.我是人类!");     } } class Student extends Person{     public void print(){         System.out.println("2.我是学生!");     } } class Worker extends Person{     public void print(){         System.out.println("3.我是工人!");     } } public class Test {     public static void main(String[] args) {         whoAre(new Student());         whoAre(new Worker());     }     public static void whoAre(Person per){         per.print();     } }

通过以上分析就可以清楚,对象的向上转型有一个最为核心的用途:操作参数统一。

多态性总结:

  • 对象多态性的核心在于方法的覆写。
  • 通过对象的向上转型可以实现接收参数的统一,向下转型可以实现子类扩充方法的调用(一般不操作向下转型,有安全隐患)。
  • 两个没有关系的类对象是不能够进行转型的,一定会产生ClassCastException。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

本文共计1021个文字,预计阅读时间需要5分钟。

Java中向上转型和向下转型有何区别与详细解析?

Java中的向上转型是基于Java的多态特性之一,转型指的是将子类对象转换为其父类类型。需要注意的是,转型的前提是方法覆盖和转型操作:方法覆盖+转型。

向上转型示例:java[自动,90%] 对象的向上转型:父类 + 父类对象=子类实例

Java之所以可以向上向下转型是依据Java三大特性之一的多态性,而转型就是对象的多态性,需要注意的是转型的前提是方法覆写

转型:

[自动,90%] (1)对象的向上转型:父类 父类对象 = 子类实例

[强制,1%] (2)对象的向下转型:子类 子类对象 = (子类) 父类实例

观察向上转型

package TestOverride;   /**  * Author:weiwei  * description:向上转型  * Creat:2019/3/29  **/   class Person{     public void print(){         System.out.println("1.我是爸爸!");     } } class Student extends Person{     public void print(){         System.out.println("2.我是儿子!");     } } public class Test {     public static void main(String[] args) {         Person per = new Student();//向上转型         per.print();     } }

运行结果:

2.我是儿子!

Process finished with exit code 0

运行结果只打印了子类print方法的内容,因为向上转型将子类对象变为父类对象,调用了子类的print方法

向下转型指的是将父类对象变为子类对象,但在这之前我们需要明确:为什么我们需要向下转型?当你需要子类扩
充操作的时候就要采用向下转型

观察向下转型(存在安全隐患)

package TestOverride;   /**  * Author:weiwei  * description:向下转型  * Creat:2019/3/29  **/   class Person{     public void print(){         System.out.println("1.我是爸爸!");     } } class Student extends Person{     public void print(){         System.out.println("2.我是儿子!");     }     public void fun(){         System.out.println("只有儿子有!");     } } public class Test {     public static void main(String[] args) {         Person per = new Person();         per.print();         //这个时候父类能够调用的方法都是本类定义好的方法         //所以并没有Student类中的fun()方法,那么只能够进行向下转型处理         Student stu = (Student) per;         stu.fun();     } }

并不是所有的父类对象都可以向下转型,如果要想进行向下操作之前,一定要首先发生向上转型,否则在转型时会出现 ClassCastException 。
观察错误转型

Person per = new Person(); //父类对象 Student stu = (Student) per; //强转

如果向下转型存在安全隐患,那么如何转型才靠谱呢?最好的做法就是先进行判断,而后在进行转型,那么就可以依instanceo关键字实现,该关键字语法如下:

Java中向上转型和向下转型有何区别与详细解析?

子类对象 instanceof类,返回boolean类型

观察instanceof操作

Person per = new Student();         System.out.println(per instanceof Person);         System.out.println(per instanceof Student);         if (per instanceof Student) { //避免ClassCastException            Student stu = (Student) per ;            stu.fun();        }

这种转换到底有什么意义?

要求定义一个方法,这个方法可以接收Person类的所有子类实例,并调用Person类的方法。

package TestOverride;   /**  * Author:weiwei  * description:向下转型  * Creat:2019/3/29  **/   class Person{     public void print(){         System.out.println("1.我是人类!");     } } class Student extends Person{     public void print(){         System.out.println("2.我是学生!");     } } class Worker extends Person{     public void print(){         System.out.println("3.我是工人!");     } } public class Test {     public static void main(String[] args) {         whoAre(new Student());         whoAre(new Worker());     }     public static void whoAre(Person per){         per.print();     } }

通过以上分析就可以清楚,对象的向上转型有一个最为核心的用途:操作参数统一。

多态性总结:

  • 对象多态性的核心在于方法的覆写。
  • 通过对象的向上转型可以实现接收参数的统一,向下转型可以实现子类扩充方法的调用(一般不操作向下转型,有安全隐患)。
  • 两个没有关系的类对象是不能够进行转型的,一定会产生ClassCastException。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。