C++与Java中继承与多态是十分重要的特性,但在学习中发现并没有一篇将这两者做比较与总结,所以写下自己观点,本文中有自己的原创,也有引用网上经典的分析与例子,引用部分会说明并贴出链接。不足之处希望大家指正。
首先说一下Java与C++继承的不相同特性,也是最容易让人混淆的三个概念:重载,重写,重定义
重载overload:重载是同名函数具有不同的形参列表(参数类型或数量),只有在同一个类内的函数才能叫做重载。
重写Overriding:重写是C++中的概念,子类与父类有同名函数,仅仅只需要函数名称相同,形参表可以不同,则子类会覆盖父类的函数。虽然很多人在Java中也提到了重写的概念,但实际上是重定义(很快会给出解释),因为在Java中子类会继承父类同名但参数不同的函数,作为重载,而在C++中父类的同名函数是不会继承的。下面分别给出C++和Java的例子。
C++
class A
{
public:
void show(string s)
{
cout << s;
}
};
class B:public A
{
public:
void show(int i)
{
cout << i;
}
};
int main()
{
int i = 0;
string s = "1";
B b;
b.show(i);
b.show(s);
}
以上代码编译后出现error C2664: “void B::show(int)”: 无法将参数 1 从“std::string”转换为“int”
可以看出B并没有继承A的参数为string的show函数,与此类似,但是在Java中就不一样了
Java
public class A {
public void show(String s)
{
System.out.println(s);
}
}
public