java - 为什么 c 的向上转换是多余的?
问题描述
我试图弄清楚为什么铸造是多余的(这就是我得到的警告)最后打印的是“C”。
public class Main {
public static void main(String[] args){
C c = new C();
B b1 = (B) c;
b1.f();
}
}
class A{
void f(){
System.out.println("A");
}
}
class B extends A{
}
class C extends B{
void f(){
System.out.println("C");
}
}
解决方案
C extends B
意味着这C
是一个B
. 而且您不需要强制C
转换为B
,因为它是B
.
所以向上转型(C 到 B)总是多余的。唯一需要强制转换的情况是向下转换(B 到 C):
B b = new C();
C c = (C) b;
推荐阅读
- r - Shinyapps.io 部署包安装失败
- javascript - 如何在 html 中隐藏表格行,使用 javaScript 将条件作为行值?如果两行值相同,则隐藏一个
- php - ftp_nlist(): 无法创建临时文件。检查临时文件目录中的权限
- android - EABI 库是否会在包更新期间使用主要支持的架构进行更新?
- java - 如何在 Flink 中加载外部 jars
- python - 如何将文件复制到 Django Web 服务器的“文档根目录”
- python - 将 RGB 热图图像转换为灰度热图的正确方法
- javascript - 理解 JavaScript 中的 bind()
- sql - 如何在 FUNCTION 中使用 GROUP 函数(MAX)?
- video - 两个视频 - 一个与闪烁的 LED 同步;全部按 GPIO 按钮