多态重写在c++和java中的一些区别

本文主要讲述的是多态中重写在c++和java中的一些区别,主要是编译器方面的差异。

多态(重写)发生的条件是:(1)要有继承关系 (2)要有函数重写(在c++中必须是virtual重写,否则就是重定义,就是静态联编了。但是在java中是没有virtual这些关键字的,只要父子类函数名字完全相同就默认为就是相当于c++中的virtual重写) (3) 父类的指针或者引用指向子类对象。

代码如下,没有virtual重写时,是重定义的意思,就是静态联编。


#include <iostream>
using namespace std;

class Parent
{
public:
	void getA()
	{
		cout << "我是父亲" << endl;
	}
protected:
private:
	int a;
};

class  Child : public Parent
{
public:
    void getA()
	{
		cout << "我是孩子" << endl;
	
	}

protected:
private:
};

void main()
{
	Child c1;
	c1.getA();   //输出“我是孩子”

	Parent* p = &c1;
	p->getA();  //输出“我是父亲”
	
	cout << "hello..." << endl;
	system("pause");
	return;
}

下面展示一段java的代码,在java中没有了很多c++方面的关键字,也没有了指针引用什么之类的符号,在父子类中函数名字相同就相当于是c++中的virtual重写,就可以发生多态了。

A.java

package day14;

public class A {
	
	void printA()
	{
		System.out.println("我是父亲");
	}

}

B.java

package day14;

public class B extends A {
	
	void printA()
	{
		System.out.println("我是儿子");
	}

}

Test.java

package day14;

public class Test {
	
	void HowToTest(A parent)  //相当于父类指针或者引用指向子类对象
	{
		parent.printA();
	}

	public static void main(String[] args) {
		
		
		A b=new B();  
		
		Test test=new Test();
		
		test.HowToTest(b); //输出我是孩子
		
	}

}

具体看代码输入输出和注释就能看出c++和java在重写方面的区别,总而言之,c++比java更加繁琐,更加注重细节

发布了228 篇原创文章 · 获赞 85 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/tianguiyuyu/article/details/104569994