c++中继承和java中继承的对比
java中:
class Parent{
public void test(int a){
System.out.println("Parent:" + a);
System.out.println(this.getClass().getName());
}
} class Child extends Parent{
public void test(int a, int b){
System.out.println("Child:" + a + " " + b);
}
} public class ParentAndChild { public static void main(String[] args) {
// TODO Auto-generated method stub
Child ch = new Child();
ch.test(5);//也就是说在java中子类会将父类的方法继承过来,没有隐藏,对于
//同名同参的是覆盖,对于同名不同参的是重载
} }
/*
输出结果:
Parent:5
testone.Child
*/
c++中:
#include<iostream>
using namespace std; class Parent{
public: static void run(){
cout<<"Parent"<<endl;
}
void test(int a){
cout<<"Parent:"<<a<<endl;
} void test(int a, int b){
cout<<"Parent:"<<a<<" "<<b<<endl;
}
}; class Child : public Parent{
public:
/* static void run(){//这两种写法都是正确的
cout<<"Child"<<endl;
}
void run(){
cout<<"Child"<<endl;
}
*/
void test(int a, int b){
cout<<"Child:"<<a<<" "<<b<<endl;
}
}; int main(){
Child ch;
ch.Parent::test(, );//通过这种调用可以访问父类的同名函数
//ch.test(4); //错误:派生类和基类中存在同名的函数,基类中的该函数被隐藏,也就是找不到
//应该写成ch.Parent::test(4);
return ;
}
区别:在c++中,重载不会发生在基类与派生类之间!当基类和派生类中存在同名函数时,无论同名函数的形参个数或者类型是否相同,派生类中的同名函数都会将基类中的同名函数隐藏(将在下边说明隐藏)掉,而不会是重载关系。这时,当你通过派生类对象调用该同名函数时,只能访问派生类的该函数,如果硬要访问基类的该函数,则需要在函数名前加上类作用域!如上述代码所示。而在java中子类会将父类中的方法继承过来,子类中同名方法会和父类中的同名方法要么是重载关系,要么是覆盖关系,要么就错误(比如同名同参却是不同的返回类型!)
在c++中隐藏只能出现在基类和派生类之间,而不能发生在同一个类内(否则会引起编译器出现二义性)。当基类和派生类中存在同名函数时,无论同名函数的形参个数或者类型是否相同,派生类中的同名函数都会将基类中的同名函数(这个函数不论是静态或者是非静态都可以,如上述例子)隐藏掉,而不会是重载关系。这时,当你通过派生类对象调用该同名函数时,只能访问派生类的该函数,如果硬要访问基类的该函数,则需要在函数名前加上类作用域!对于虚函数(用virtual修饰的),如果基类中有一个虚函数,派生类中同样有一个同名同参的函数(那么该函数将自动虚化), 那么其返回值一定要和基类的虚函数的返回值相同!否则隐藏失败!
但是在java中请记住这样的原则:非静态方法只能由(或被)非静态方法覆盖!静态方法只能由(或被)非静态方法覆盖!抽象方法必须在具体类中被覆盖!最终方法(带关 键字final的方法)不能被覆盖!
c++中继承和java中继承的对比的更多相关文章
- Andriod ADT v22.6.2版本中在Mainactivity.java中使用fragment_main.xml中TextView控件对象的问题
众所周知,我们既可以在 activity_main.xml文件中控制activity中的view,也可以使用java代码的set..()方法控制它.在学习过程中,发现在ADT新版本中,和以前版本有区别 ...
- c++中怎么实现Java中finally语句
所有学习c++的书籍都明确提出了,不要使用goto, 以免造成程序流程的混乱,使理解和调试程序都产生困难. 但是我们遇到这样一个场景怎么办:就是不管程序执行成功与否,都要执行一些资源释放语句,相当ja ...
- C++中类的继承与Java中的不同,C++的派生类不能继承父类的构造函数和析构函数(不一定正确)
http://blog.csdn.net/guodongxiaren/article/details/24885023
- 基础:c++中引用与java中的引用
using namespace std; class Point { public: double x; double y; Point(){} void setPoint(double x,doub ...
- 大数据项目中js中代码和java中代码(解决Tomcat打印日志中文乱码)
Idea2018中集成Tomcat9导致OutPut乱码找到tomcat的安装目录,打开logging.properties文件,增加一行代码,覆盖默认设置,将日志编码格式修改为GBK.java.ut ...
- android开发中,在java中怎样使用c提供过来char*
这个char*假设是一般的字符串的话,作为string传回去就能够了.假设是含有'\0'的buffer,最好作为bytearray传出,由于能够制定copy的length.假设copy到string, ...
- C#中TripleDES对应Java中的DESede即大家说的3DES,附C#及Java加解密结果一致的控制台程序例子
直接上代码了. Java控制台代码: package Test; import java.security.Key; import javax.crypto.Cipher; import javax. ...
- js代码中定义后台java中的上下文路径
var href = <c:out value='${sessionScope.contextPath}' />
- java中接口和继承的区别
实际概念区别:区别1:不同的修饰符修饰(interface),(extends)区别2:在面向对象编程中可以有多继承!但是只支持接口的多继承,不支持'继承'的多继承哦而继承在java中具有单根性,子类 ...
随机推荐
- Template Method模式和Strategy模式[继承与委托]
继承 program by difference. 通过继承,可以建立完整的软件结构分层.其中每一层都可以重用该层次以上的Code. 过度使用继承的代价是巨大的.应使用组合或者委托来替代继承. Tem ...
- javascript实例——时间日期篇(包含5个实例)
本来想在网上找一些js实例来练练手,结果发现一本书<突破JavaScript编程实例五十讲>,看了下内容还不错,就下了下来: 后面又下了该书籍的源码,一看才发现这本书编的日期是2002年的 ...
- 《Xenogears》(异度装甲)隐含的原型与密码
<Xenogears>(异度装甲)隐含的原型与密码 X 彩虹按:一种高次元的“生命体”,因“事故”被抓来当成“超能源”,其实那不只是“无限的能源”而已,“它”是有意志的!在我们眼里看来,这 ...
- c++ const放置的位置
标准中int const a 与 const int a 是完全等价的.正因为如此,会有很多各种不同的风格,同样的还有"*是跟类型还是变量?",比如char* p与 char *p ...
- Win7快捷方式图标不显示解决办法
问题:WIN7的系统,桌面.开始菜单以及任务栏的快捷方式图标显示不正常,看不到程序默认图标,快捷方式图标不显示. 解决方法:删除程序图标缓存即可. 将下面的内容复制到记事本保存为“图标缓存清理.b ...
- 使用Installutil安装系统服务方法
系统必须装有.net Framework2.0然后点击开始-运行输入以下指令即可完成相应操作安装服务:C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/Ins ...
- crond: unrecognized service 无crond解决办法
运行计划任务时:service crond restart提示:crond: unrecognized service安装计划任务:yum -y install vixie-cron 另外附计划任务的 ...
- 2014 Hangjs 见闻流水账第二天
前言 第一天传送门: 2014 Hangjs 见闻流水账第一天 写作风格跟第一天还是一样的. Slide 每个slide我都会根据自己的理解重新命名一次,用于表达自己的第一看法,主观意见,不喜可吐槽, ...
- C# Activex开发、打包、签名、发布 C# Activex开发、打包、签名、发布 [转]
C# Activex开发.打包.签名.发布 2013-06-22 12:01:20 浏览:3823 一.前言 最近有这样一个需求,需要在网页上面启动客户端的软件,软件之间的通信.调用,单单依靠HTML ...
- XML 文档和数据
.NET Framework 4.5 其他版本 .NET Framework 提供了一组全面而集成的类,可用来方便地生成可以识别 XML 的应用程序. 通过以下命名空间中的类,可以分析和编写 XML, ...