Des*_*tor 1 c++ java inheritance
我们知道重载对C++中的派生类不起作用.但为什么这种行为在java中有所不同?意味着为什么重载适用于java中的派生类?请考虑以下Stroustrup博士的常见问题解答中的示例
#include <iostream>
using namespace std;
class Base
{
public:
int f(int i)
{
cout << "f(int): ";
return i+3;
}
};
class Derived : public Base
{
public:
double f(double d)
{
cout << "f(double): ";
return d+3.3;
}
};
int main()
{
Derived* dp = new Derived;
cout << dp->f(3) << '\n';
cout << dp->f(3.3) << '\n';
delete dp;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序的输出是:
f(双):6.3
f(双):6.6
而不是假定的输出:
f(int):6
f(双):6.6
但如果我们在java中执行此程序,则输出会有所不同.
class Base
{
public int f(int i)
{
System.out.print("f (int): ");
return i+3;
}
}
class Derived extends Base
{
public double f(double i)
{
System.out.print("f (double) : ");
return i + 3.3;
}
}
class Test
{
public static void main(String args[])
{
Derived obj = new Derived();
System.out.println(obj.f(3));
System.out.println(obj.f(3.3));
}
}
Run Code Online (Sandbox Code Playgroud)
您已经说过"我们知道重载对C++中的派生类不起作用".
这不是真的,也不是准确的句子.您可以在C++中跨基类和派生类重载.只需要将using父方法放入派生类中以取消隐藏该方法.
class Derived : public Base
{
public:
using Base::f;
^^^^^^^^^^^^^^
double f(double d) { ... }
};
Run Code Online (Sandbox Code Playgroud)
在派生类中的Java重载(同名)方法不会隐藏其父方法,您不需要从父方法显式地引入它.
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |