java - java中向上转型和向下转型的困惑

标签 java downcast upcasting

好的。所以如果...

int x=3;
int y=5;


x=y;

这将使 x=5,对吗?

好的,如果 BA 的子类...

A a=new A();
B b=new B();

a=b;

^^^为什么这被认为是向上转换?

“a”不是应该变成“b”而不是反过来吗?有人可以向我解释这一切吗?

最佳答案

让我们跳到一个具体的例子,而不是AB

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();

您可以访问 greetvalidateAlgorithm。你知道他(她)是一个,并且可以像其他人一样问候他/她。但是,您也可以将他/她专门视为 ComputerScientist

当您将此对象分配给类型为 Person 的变量时,您所做的就是说 “我不再关心您是 ComputerScientist。从现在开始,我会像对待任何其他一样对待你。”

Person p = cs;

相当于

Person p = (Person) cs;

p 引用的对象仍然知道如何validateAlgorithm,并且仍然告诉您他(她)在信息学部门工作。但是,当通过 p 访问它时, 告诉编译器你只想问候这个,没有别的。

之所以称为向上转型,是因为变量在层次结构树中向上,其中向上意味着更一般/抽象down 表示更具体。您正在概括 ComputerScientist 作为

关于java - java中向上转型和向下转型的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19076616/

相关文章:

java - 该方法是修改器还是访问器方法?

java - 无法在 Java 中访问 View 对象的公共(public)方法(Android)

c++ - 在 C++ 中实现包含有效负载的类的最佳实践?

casting - F#:贬低受歧视的工会

c++11 - unique_ptr 向上转型作为返回

java - 如何使用 Java (Bing-Search-API) 从 JSON 访问嵌套元素

java - 数据结构 - 用 Ja​​va 创建 Bag

c++ - 使用 static_cast(或 reinterpret_cast)进行不添加成员的继承的无效向下转换的安全性

c# - 向上转型及其对堆的影响

java - 在 Java 中,为什么将字符类型转换为整数不扩展符号位