JAVA与C++在继承中的区别(一)
我们学过C++,在子类(派生类)的实例中,可以通过作用域来调用父类(基类)中被子类同名成员函数隐藏的成员函数;
例如:
#include<iostream>
using namespace std;
class Father {
public:
void show() {
cout << "This is father.show()!" << endl;
}
};
class Son:public Father {
public :
void show() {
cout << "This is son.show()!" << endl;
}
};
int main() {
Son s;
s.show();
//若想调用父类中同名方法,我们可以这样做,使用作用域运算符
s.Father::show();
}
输出结果:
This is son.show()!
This is father.show()!
C:\Users\Administrator\source\repos\Date\Debug\Test.exe
(进程 4272)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”
->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
自从看到这里,我就在想,能不能使用JAVA进行如同C++这样的操作。
经过查询资料,发现,如果子类没有重写父类的方法,调用父类的方法的时候,实际上是去父类的内存中实现,可以调用父类方法。
如果子类重写了父类的方法,由于内存还是子类,该方法的实现还是在子类,所以用实例化的对象是调用不到父类的,这种情况下,只能用super关键字。
这里就要简单说一下JAVA的多态
Person p=new Son();
/***
这里是用子类去实例化父类,进而实现多态。
父类和子类中有同名成员函数show();
*/
p.show();
//这时,依旧是调用子类重写的方法。
//例如:
class Father{
public void show(){
System.out.println("this is person!");
}
}
class Son extends Father{
@Override
public void show() {
System.out.println("this is son!");
}
public static void main(String[] args){
Father son = new Son();
son.show();
}
}
输出结果是:
"C:\Program Files\Java\jdk-15\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\lib\idea_rt.jar=11848:C:\Program Files\JetBrains\IntelliJ IDEA 2020.3.1\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\Administrator\IdeaProjects\untitled1\out\production\JavaFxApplication;H:\编程软件\Oracle\ojdbc10-full\ojdbc10.jar sample.Son
this is son!
ps.本人资历较浅,若有不对,希望有问题大家指正一下!
目前JAVA反射机制尚未搞懂,若有可以实现该方法,后期追加!!