gpt4 book ai didi

java.upcasting

转载 作者:行者123 更新时间:2023-11-29 09:46:16 25 4
gpt4 key购买 nike

我有这个例子:

class One
{
public void testOne(){System.out.println("One!!!");}
public void testTwo(){System.out.println("One!!!");}
}
public class Jenia extends One
{
static void test(One o) {o.testOne(); o.testTwo();}
public static void main(String args[])
{
test(new One());
}
}

结果:

One!!!
One!!!

好的,没有问题。

然后,我尝试修改我的代码:

只有这个方法:

public static void main(String args[])
{
test(new Jenia());
}

结果:

One!!!
One!!!

好的,我们得到这个结果是因为 - 这里是向上转换(Jenia-One)。

一切正常,但是,再次修改: 在 Jenia 类覆盖方法testOne` 中:

public void testOne(){System.out.println("Two!!!");}

所以我有这个代码:

class One
{
public void testOne(){System.out.println("One!!!");}
public void testTwo(){System.out.println("One!!!");}
}
public class Jenia extends One
{
public void testOne(){System.out.println("Two!!!");}

static void test(One o){o.testOne(); o.testTwo();}
public static void main(String args[])
{
test(new Jenia());
}
}

和结果:

Two!!!
One!!!

我的问题:为什么是两个!!! ??为什么我们没有丢失覆盖方法?

最佳答案

因为就 C++/C# 而言,Java 中的所有方法都是虚拟的,并且所有值都是通过引用传递的。所以当你调用某个方法时,引用的类型是无关紧要的,重要的是它指向的对象的类型。在你的例子中,对象是 Jenia 类型,所以 Jenia 方法被调用。

关于java.upcasting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4437066/

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