[英]Difference between Type casting and Up/Down casting in inheritance [Java]?
我们知道以下内容:: (编辑 20210101_0059 EST)
public class Main {
public static void main(String[] args) {
int myInt = 9;
double myDouble = (double) myInt; // casting: int to double
}
}
类型转换是指将一种原始数据类型的值分配给另一种类型。
扩大铸造(自动) - 将较小的类型转换为较大的类型大小 byte -> short -> char -> int -> long -> float -> double https://www.w3schools.com/java/java_type_casting.asp
问题::
类型转换和向上转换/向下转换有什么区别? 类型转换如何工作?
在这个例子中是向上转换吗? 如果是这样,这是否意味着整数从 double 继承? (我不这么认为)
更新低于 20210101_0059~0154 EST
我换行
double myDouble = myInt; // casting: int to double
// change to >>
double myDouble = (double) myInt; // casting: int to double
因为我的意图是谈论选角。 这个错误导致人们开始谈论类型转换而不是强制转换。
到目前为止,根据答案,我知道 Java 语言规范中没有向上/向下转换。 我简要浏览了5.5。 铸造上下文和 5.5.1。 引用类型转换
问题::
那么,究竟什么是铸件? “铸造”基本上只是“类型转换”吗?
并且有很多类型的转换(/类型转换)对吗?
问题(确认) ::
1.因此,超类和子类之间不必存在强制转换(即:转换不仅存在于具有 inheritance 关系的 2 个 class 中),对吧?
2. 通常,当我们谈论向上/向下转换时,我们在“引用类型转换”中使用它。 但在我们的例子中double myDouble = (double) myInt;
没有向上/向下转换。 而且,在这两种情况下,铸件(上/下铸件和 int-double 铸件)只是“类型转换”。 正确的?
3.简而言之,它们之间的唯一区别就是:
类型铸造——铸造的总称。
Up/Down casts——这个术语只用在“Reference Type Casting”中,它涉及到inheritance。
转换“byte short char int long float double”(例如: double myDouble = (double) myInt;
)——(只是“引用类型转换”中未使用的不同类型的转换)。
正确的?
类型转换是指将一种原始数据类型的值分配给另一种类型。
根据规范,这是不正确的。 规范指定了一个如下所示的强制转换运算符:
(some type) some expression
例如
(float)someDouble
规范还指定这是一个强制转换上下文。
W3Schools 所说的“类型转换”是什么意思,规范称为“转换”。 转换发生在上下文中。 W3Schools 通过“向上转换”和“向下转换”可能意味着“扩大转换”和“缩小转换”。
这个:
double myDouble = myInt;
是从int
到double
的转换(许多扩展的原始转换之一),发生在赋值上下文中。 没有演员表参与。
将其与实际演员表进行比较:
(float)myDouble
这是在强制转换上下文中发生的从double
到float
的转换(许多缩小的原始转换之一)。
不,像int
、 double
、 float
等原始类型不能从任何东西继承。 这些原始转换是规范“硬编码”/强制的,而不是“ int
继承自double
”或类似的结果。
向上转换是转换为超类型,而向下转换是转换为子类型。 向上转型始终是允许的,但向下转型涉及类型检查并且可能引发 ClassCastException。 这意味着向上转换是子 object 到父 object 的类型转换,它可以隐式完成。 同样,向下转换意味着将父 object 类型转换为子 object 并且不能是隐式的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.