C++ 与 Java的成员函数对比

在C++中的成员函数覆盖:
#include <iostream>
using namespace std;
class A
{
public:
void	test()
	{
		cout<<"I'm A\n ";
	}
	
};
class B:public A
{
void test()
	{
		cout<<"I'm B\n'";
	}

};
int main()
{
	A* p = new B;
	p->test();
	return 0;

测试发现输出的是

I'm A
也就是说如果子类的函数如果覆盖了基类的函数的话,如果实例化一个子类并且赋值给基类指针或者基类引用的话,调用被覆盖的函数其实是调用的是基类的成员函数,

但是在Java中不是这样的,对于Java的成员函数覆盖,结合下面的代码讲解会比较直观:

public class A
{
	public void testFun() {
		System.out.print("I'm A");
	}
}


public class B extends A
{
	public void testFun() {
		System.out.print("I'm B");
	}
}


public class test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		A a = new B();
		a.testFun();
		//System.out.print("test");
	}

}

上例输出的是:
I'm B
可以看到,对于Java来说,调用被覆盖的成员函数是通过基类的变量来调用子类的成员函数,这个和C++是不一样的,

假如Java中有这么一个继承链

C1->C2>C3 ......->Cn

其中C1是C2的子类,C2是C3的子类 ........对于Java的类中默认的基类是Object类,内部实现了toString()函数

如果有这么一个函数

void   Func(Object o)

{

       System.out.print(o.toString());

}

如果将以上C1的实例传给该函数的话,如果C1中实现了toString()函数的话,o.toString()调用的则是C1中的toString(),如果其未

实现则沿着继承链检测C2是否实现了toString()如果没有则继续此过程。



因为开了Java的课,很无奈要学Java,从学编程到现在接触的都是C/C++,学习Java很不爽,感觉它在很多地方违背了C++逻辑



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值