网站首页 > java教程 正文
难度
初级
学习时间
30分钟
适合人群
零基础
开发语言
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第九十一章:内部类有多态特性吗?
学习小组
加入同步学习小组,共同交流与进步。
- 方式一:关注头条号Gorhaf,私信“Java学习小组”。
- 方式二:关注公众号Gorhaf,回复“Java学习小组”。
全栈工程师学习计划
关注我们,加入“全栈工程师学习计划”。
版权声明
原创不易,未经允许不得转载!
猜你喜欢
- 2024-10-11 SpringBoot整合Nacos配置中心加载原理二
- 2024-10-11 Java核心修饰符——abstract修饰符与抽象类、抽象方法
- 2024-10-11 绝对的JAVA面试干货(java juc 面试)
- 2024-10-11 Java面试集合(三)-1(基础篇java集合面试专用)
- 2024-10-11 Java之路-10 API、Scanner类、Random类、Math类
- 2024-10-11 JAVA面试基础知识点(java面试必背)
- 2024-10-11 java面试题及答案2022,java2022最新面试题及答案
- 2024-10-11 java向上转型和向下转型(java向上转型调用的是子类还是父类属性)
- 2024-10-11 「Java基础11」常用API(java基础知识点整理汇总)
- 2024-10-11 java基础总结(java基础总结心得)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)