gpt4 book ai didi

java - Java 赋值期间的转换

转载 作者:行者123 更新时间:2023-12-01 18:06:03 25 4
gpt4 key购买 nike

Java 中变量赋值期间是否有使用强制转换?

例如,我有两个类,Person 和 Student,它们继承自 person:

  • 人| -id:整数
  • 学生 -> 人 | -gpa:双倍

然后在主要部分我有以下代码:

Student S = new Student(1, 4.00);
Person P = (Student)S;
System.out.println(P.getId() + " " + ((Student)P).getGpa());

IntelliJ 告诉我,P = (Student)S 中的转换是多余的,如果我在调用 getGpa 方法时进行转换,它就可以工作:

Student S = new Student(1, 4.00);
Person P = S;
System.out.println(P.getId() + " " + ((Student)P).getGpa());

但是,如果我在分配期间进行转换,但在调用 getGpa 时不会再次出现错误:

Student S = new Student(1, 4.00);
Person P = (Student)S;
System.out.println(P.getId() + " " + P.getGpa());

所以我的问题是 - 在分配期间进行转换是否有用?或者它是否允许但总是多余的,因为您仍然必须在每个方法调用中告诉编译器您正在转换为子类型?

感谢您的帮助。

最佳答案

当您知道编译器不知道的事情时,赋值期间的转换并不是多余的。

当您将 Student 对象分配给 Person 变量时,无需进行强制转换,因为编译器知道 Student 继承自 Person 。但是,如果您将 Person 对象分配给 Student 变量,编译器不知道 Person 对象是否也是 Student > 对象。

在这种情况下,您必须在赋值期间使用强制转换来告诉编译器您知道这个特定的 Person 对象也是 Student。您通常会首先使用 instanceof 进行验证。

if (P instanceof Student) {
Student S2 = (Student) P; // here the casting during assignment is required
S2.getGpa();
}

关于java - Java 赋值期间的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36379427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com