gpt4 book ai didi

java - 向上转换实际上如何在 Java 中工作

转载 作者:行者123 更新时间:2023-11-30 10:01:18 26 4
gpt4 key购买 nike

我有 3 个类,其中一个是 父类(super class),另外两个是 子类。他们有共同的 print() 方法。在从 main() 调用 print() 方法时,我已经将对象向上转换为 super class 那么是不是它必须调用 的方法code>super class 而不是 subclasses。我在这里有点困惑。这怎么可能? Java 中是否存在这种行为的任何原因。

这是我的代码

class Tree {
public void print() {
System.out.println("I am Tree");
}
public static void main(String []args) {
Tree t[] = new Tree[3];
t[0] = new Tree();
t[1] = new BanyanTree();
t[2] = new PeepalTree();
for(int i = 0; i < 3; i++) {
((Tree)t[i]).print();
}
}
}


public class BanyanTree extends Tree{
public void print() {
System.out.println("I am BanyanTree");
}
}


public class PeepalTree extends Tree{
public void print() {
System.out.println("I am PeepalTree");
}
}

程序的输出是

I am Tree
I am BanyanTree
I am PeepalTree

根据我的说法,输出应该是

I am Tree
I am Tree
I am Tree

我是不是漏掉了什么???

最佳答案

这称为多态性。该方法采用相同的类型 (none)、相同的返回类型 (void) 和相同的名称 (print)。因此,当您调用 print 方法时,它会调用最专门的方法(继承树中最低的方法)。有一种东西叫他们认为对象是什么,它到底是什么。他们认为这是一棵树,但实际上是一棵榕树。如果你向上投它,它不会做任何事情,因为树的阵列使他们认为它们是树,如果你向上投它到一棵树,他们仍然认为它是一棵树。从技术上讲,您将其转换为完全相同的东西。抱歉没有在我的回答中包含这个。当你创建一个新的 Tree 时,继承结构看起来像这样。

Object (Cosmic Super-class)

|

\ /

Tree

最专业的方法是树。但是,当您创建另一种类型的树时,比如说 BanyanTree,其结构如下所示。

Object

|

\ /

Tree

|

\ /

BanyanTree

最专业的 print 方法来自 BanyanTree,因此它会执行该方法。对不起,如果你不明白,这是一个非常复杂的话题。

关于java - 向上转换实际上如何在 Java 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57499266/

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