C++和java的多态性比较

36 篇文章 0 订阅

C++子类类型的指针赋值给父类类型的指针。如father* fason = new son(3);

Java子类类型的引用赋值给父类类型。如father fason = new son();


共同点:

不能访问子类新增的成员。


区别:

C++必须在父类方法中加上virtual,否则即使子类重写了父类的方法,fason->print()依然调用的是父类的方法。

Java与C++不同,只要子类重写了父类的方法,fason.print()调用的就是子类的方法。


//C++多态实现的必要条件:virtual+重写
#include "iostream"
using namespace std;
class father{
public:
	int f;
	father(){
		f = 0;
	}
	//java则不需要virtual
	//virtual void print(){
	void print(){
		//必须有virtual,father* fason = new son(3);fason->print();才会调用子类的,
		//但若此时子类没有定义(重写)print(),则还是访问父类的,而且输出的也是父类的f值
		
		cout<<"f = "<<f<<endl;
	}
};

class son:public father{
public:
	int f;
	son(int x):father(){
		f = x;
	}
	void print(){//为了实现多态性,不止父类需要virtual,这里也必须重写方法
		cout<<f<<endl;
	}
	void prt(){
		cout<<"hello"<<endl;
	}
};

int main(){
	father* fason = new son(3);
	fason->print();
	//fason->prt();
	return 0;
}

/**
 * 子类只需重写父类的成员即可。
 */
package t;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Collections;

class father{
	public int f = 0;
	public void print(){
		System.out.println("f = "+f);
	}
	
}
class son extends father{
	public int f = 3;//f覆盖
	public void print(){//覆盖
		System.out.println(f);
	}
}

class sont extends father{
	
	public void print(){
		System.out.println(f);//f继承,方法覆盖
	}
}

public class Test{       
  
	public static void main(String[] args) throws Exception {       	 	
    	
    	father fason = new son();
    	fason.print();//输出儿子的数据
    	
    	father fa = new father();
    	fa.print();
    	
    	father fasont = new sont();
    	fasont.print();
    	
        
    }   
}  

 


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值