gpt4 book ai didi

java - 关于多态和重载的问题

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:36:22 27 4
gpt4 key购买 nike

我正在尝试理解多态性和重载的概念。我有以下代码作为一种实验。但是,我无法弄清楚为什么这个程序不运行(由于 mobj.foo(str) 而失败。mobj 是使用多态性定义的,并且我可以gather,应该是 MyDerivedClass 类型。如果那是真的,那么有问题的行是否可以正常工作?

为什么该行无效?

class MyBaseClass {
protected int val;
public MyBaseClass() { val = 1; }
public void foo() { val += 2; }
public void foo(int i) { val += 3; }
public int getVal() { return val; }
}

class MyDerivedClass extends MyBaseClass {
public MyDerivedClass () { val = 4; }
public void foo() { val += 5; }
public void foo(String str) { val += 6; }
}

class Test {
public static void main(String[] args)
{
MyBaseClass mobj = new MyDerivedClass();
String str = new String("hello");
mobj.foo();
mobj.foo(str);
mobj.foo(4);
System.out.println("val = " + mobj.getVal());
}
}

最佳答案

失败是因为

 MyBaseClass mobj = new MyDerivedClass();

你告诉编译器 mobj 是一个 MyBaseClass,所以它不知道有一个 foo(String) 方法。

这类事情在运行时得到解决。

关于java - 关于多态和重载的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3981954/

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