好的。因此,如果...
int x=3;
int y=5;
x=y;
这样就可以了x=5,对吧?
好的,所以 ifB是A...的子类
A a=new A();
B b=new B();
a=b;
^^^为什么这被认为是向上转换?
“a”不是应该变成“b”而不是相反吗?有人可以向我解释这一切吗?
让我们跳到一个具体的例子,而不是As 和s。B
class Person {
public void greet() {
System.out.println("Hello there!");
}
}
class ComputerScientist extends Person { // Does he, really?
@Override
public void greet() {
System.out.println("Hello there! I work at the Informatics Department.");
}
public void validateAlgorithm(Algorithm a)
throws InvalidAlgorithmException {
// ...
}
}
当你有一个ComputerScientistas
ComputerScientist cs = new ComputerScientist();
您可以同时访问greet和validateAlgorithm。您知道(她)他是一个Person,并且可以将greet他/她与任何其他人一样。但是,您也可以专门将他/她视为ComputerScientist.
当您将此对象分配给 type 的变量时Person,您所做的就是说“我不再关心您是一个ComputerScientist. 从现在开始,我将像对待任何其他人一样对待您Person”。
Person p = cs;
这相当于
Person p = (Person) cs;
引用的对象p仍然知道如何validateAlgorithm,并且仍然告诉您他在信息学部门工作。但是,当通过 访问它时p,您是在告诉编译器您只想要greetthis Person,没有别的。
之所以称为向上转换,是因为变量在层次结构树中向上,向上表示更一般/抽象,向下表示更具体。您将a概括ComputerScientist为Person.
之后a = b;,变量a(用 type 声明A)将引用 type 的对象B。因此,赋值涉及一个隐式向上转换:a = (A)b;,将 Java 视图的方式b从转换B为它的超类A。那是一个上流。
A a = new A();
B b = new B();
流程如下:
new A()并分配给引用变量 a 类似地 B 的对象是使用创建的new B()并分配给引用变量 b现在来解决您的问题,这就是a=bUPCASTING的原因
这个链接会让它更清楚https://www.youtube.com/watch?v=Wh-WZXCAarY
希望这可以帮助。
这将使x = 5,对吗?
正确的。
好的,所以如果 B 是 A 的子类...
^^^为什么这被认为是向上转换?
因为就是这样。
“a”不是应该变成“b”而不是相反吗?
是的,确实如此。对 B 的引用向上转换为对“A”的引用。