关于java和c++中类的继承与覆盖问题
有本java教材上这样写:对重载和覆盖的总结:1.方法的覆盖出现在父类和子类之间,并且方法的特征要完全相同。2.方法的重载可以出现在一个类中,也可以分别出现在父类和子类中...
有本java教材上这样写: 对重载和覆盖的总结: 1.方法的覆盖出现在父类和子类之间,并且方法的特征要完全相同。 2.方法的重载可以出现在一个类中,也可以分别出现在父类和子类中,方法的特征不完全相同。 请问这样的表述正确吗? 《高质量c\c++编程指南》一书中这样写道: 成员函数被重载的特征: 1.相同的范围(在同一个类中)。 2.函数名字相同。 3.参数不同。 4.virtual关键字可有可无。 覆盖是指派生类函数覆盖基类的函数,特征是: 1.不同的范围(分别位于派生类和基类)。 2.函数名字相同。 3.参数相同。 4.基类函数必需有virtual关键字。 但是在c++里面还有“隐藏规则”。请参见; http://blog.csdn.net/liluvu/archive/2004/09/23/114701.aspx java中的有“隐藏规则”这一说法吗?java中的继承和c++中的继承有什么不同的地方吗? 请哪位知情者详细相告啊!
展开
1个回答
2013-09-13
展开全部
JAVA覆盖 1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果; 2、覆盖的方法的返回值必须和被覆盖的方法的返回一致; 3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类; 4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。 重载 1.必须在一个类中 2.方法名相同而参数的类型不同 3.方法名相同而参数的个数不同 4.方法名相同而参数的位置不同 5.光返回值不同的方法不叫重载 C++的隐藏规则这里“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。 JAVA没有隐藏规则这一说法~~ 我主要想知道java中有没有隐藏规则这一说法 C++中隐藏的第一个规则是如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏 咱JAVA中方法名相同但参数不同这种情况就是方法的重载,但是父类的方法还是存在的,你给定父类方法的参数还是可以调用它,但是C++中这种情况父类的方法就被隐藏了。 java中的继承和c++中的继承有什么不同的地方吗? JAVA容许类地继承,而且是单继承,也就是一个子类只可以有一个直接父类(基类),但是这个子类的父类有可能是另一个类的子类,例如A extends B,B extends C,A也就拥有了C的可见成员与方法,这是类继承的传递性。但是C++中容许一个子类可以有多个基类,是容许多继承的,例如class A:public B,public C,这虽然能更好的描述显示世界,但是也让问题更复杂。JAVA通过类继承的传递性实现了C++的多继承的功能。 java中继承可以发生在子类和父类中这是和c++的不同点吗。 所谓的继承就是一个类继承类另一个类,拥有了父类(c++中的基类)的可见成员与可见方法,继承只能发生在子类和父类中。 java中的重载可以不在一个类中这么说对吗? 这种说法是错误的,JAVA中的重载是多态的一种情况,另一种情况是覆盖,重载只能是在一个类中 重载 1.必须在一个类中 2.方法名相同而参数的类型不同 3.方法名相同而参数的个数不同 4.方法名相同而参数的位置不同 5.光返回值不同的方法不叫重载 假如A类和B类出现了方法名相同,参数的个数,类型,顺序也相同的情况,同时在C类中还是用了A类B类的这个方法,这种情况也不是重载,这两个方法还是可以通过调用方法的对象区别开来的。 就上述这种情况,如果A,B类的对象在C类中相互调用了对方的方法,那么,AB一定有一个可以转换为对方的类型,即它们之间是有继承关系的,这就是方法的覆盖而不是重载了~~ 还有什么问题加QQ详细讨论啊QQ313065394
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询