专业的JAVA编程教程与资源

网站首页 > java教程 正文

“全栈2019”Java第九十章:内部类可以向上或向下转型吗?

temp10 2024-10-11 18:21:03 java教程 15 ℃ 0 评论

难度

初级

学习时间

30分钟

“全栈2019”Java第九十章:内部类可以向上或向下转型吗?

适合人群

零基础

开发语言

Java

开发环境

  • JDK v11
  • IntelliJ IDEA v2018.3

提示

本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。

1.内部类向上转型

内部类可以向上转型吗?我们来试试。

演示:

请定义一个外部类Outer,在外部类Outer中定义一个内部类Inner和一个嵌套接口IInner。

在嵌套接口IInner中定义一个抽象方法。

内部类Inner实现嵌套接口IInner。

在Main类中定义一个静态方法,参数接受一个嵌套接口IInner,方法体中调用其嵌套接口的抽象方法。

在main()方法中创建内部类Inner对象,调用静态方法,传入Inner对象。

请观察程序运行结果。

代码:

Outer类:

Main类:

结果:

从运行结果来看,我们的内部类是可以向上转型的。

程序中,向上转型代码:

2.内部类向下转型

第1小节演示了内部类可以向上转型,那么我们的内部类可不可以向下转型呢?来试试。

演示:

请定义一个外部类Outer,在外部类Outer中定义一个内部类Animal,在内部类Animal中定义一个实例方法eat()。

在外部类Outer中再定义一个内部类Dog和一个内部类Cat,这两个内部类都继承自内部类Animal,并重写eat()方法。

在Main类main()方法中创建内部类Animal对象,然后调用其eat()方法。再将Animal对象向下转型也调用其eat()方法。

请观察程序运行结果。

代码:

Outer类:

Main类:

结果:

错误信息:

文字版:

Exception in thread "main" java.lang.ClassCastException: class lab.Outer$Animal cannot be cast to class lab.Outer$Dog (lab.Outer$Animal and lab.Outer$Dog are in unnamed module of loader 'app')

at main.Main.main(Main.java:16)

我们可以看到出现了类型转换异常,说明我们父类不能向下转型,只能向上转型。普通类和内部类规则是一样的,都不能向下转型。

总结

  • 内部类可以向上转型。
  • 内部类作为父类时不能向下转型。

至此,Java中内部类与向上转型和向下转型相关内容讲解先告一段落,更多内容请持续关注。

答疑

如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。

上一章

“全栈2019”Java第八十九章:接口中能定义内部类吗?

下一章

“全栈2019”Java第九十一章:内部类有多态特性吗?

学习小组

加入同步学习小组,共同交流与进步。

  • 方式一:关注头条号Gorhaf,私信“Java学习小组”。
  • 方式二:关注公众号Gorhaf,回复“Java学习小组”。

全栈工程师学习计划

关注我们,加入“全栈工程师学习计划”。

版权声明

原创不易,未经允许不得转载!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表