好的。所以如果...
int x=3;
int y=5;
x=y;
这将使 x=5
,对吗?
好的,如果 B
是 A
的子类...
A a=new A();
B b=new B();
a=b;
^^^为什么这被认为是向上转换?
“a”不是应该变成“b”而不是反过来吗?有人可以向我解释这一切吗?
最佳答案
让我们跳到一个具体的例子,而不是A
和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 {
// ...
}
}
当你有一个ComputerScientist
作为
ComputerScientist cs = new ComputerScientist();
您可以访问 greet
和 validateAlgorithm
。你知道他(她)是一个人
,并且可以像其他人一样问候
他/她。但是,您也可以将他/她专门视为 ComputerScientist
。
当您将此对象分配给类型为 Person
的变量时,您所做的就是说 “我不再关心您是 ComputerScientist
。从现在开始,我会像对待任何其他人
一样对待你。”。
Person p = cs;
相当于
Person p = (Person) cs;
p
引用的对象仍然知道如何validateAlgorithm
,并且仍然告诉您他(她)在信息学部门工作。但是,当通过 p
访问它时,你 告诉编译器你只想问候
这个人
,没有别的。
之所以称为向上转型,是因为变量在层次结构树中向上,其中向上意味着更一般/抽象 和 down 表示更具体。您正在概括 ComputerScientist
作为人
。
关于java - java中向上转型和向下转型的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19076616/