JAVA与C++在继承中的区别(一)

2021/4/14 12:25:12

本文主要是介绍JAVA与C++在继承中的区别(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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反射机制尚未搞懂,若有可以实现该方法,后期追加!!



这篇关于JAVA与C++在继承中的区别(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程