繁体   English   中英

inheritance [Java] 中的类型转换和向上/向下转换之间的区别?

[英]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;

是从intdouble转换(许多扩展的原始转换之一),发生在赋值上下文中 没有演员表参与。

将其与实际演员表进行比较:

(float)myDouble

这是在强制转换上下文中发生的从doublefloat的转换(许多缩小的原始转换之一)。

不,像intdoublefloat等原始类型不能从任何东西继承。 这些原始转换是规范“硬编码”/强制的,而不是“ int继承自double ”或类似的结果。

类型转换是指将一种原始数据类型的值分配给另一种类型。

通过使用强制转换操作,强制转换是显式的。 请参阅语言规范

类型转换是一个通用术语。 具体情况被描述为向上转换(子类到超类)或向下转换(超类到子类),但这些情况仍然是类型转换。

在诸如

double myDouble = myInt;

没有演员表。 这是一个类型转换 特别是扩大的原始转换。

对于引用类型,有一个类似的扩大转换(从子类型到超类型)的概念,也有缩小转换(超类型到子类型)的概念。

类型转换可能是隐式的。 强制转换用于显式强制特定转换。

向上转换是转换为超类型,而向下转换是转换为子类型。 向上转型始终是允许的,但向下转型涉及类型检查并且可能引发 ClassCastException。 这意味着向上转换是子 object 到父 object 的类型转换,它可以隐式完成。 同样,向下转换意味着将父 object 类型转换为子 object 并且不能是隐式的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM