java和c#、cc++的比较

java和c#、cc++的比较

ID:32865274

大小:42.41 KB

页数:5页

时间:2019-02-16

java和c#、cc++的比较_第1页
java和c#、cc++的比较_第2页
java和c#、cc++的比较_第3页
java和c#、cc++的比较_第4页
java和c#、cc++的比较_第5页
资源描述:

《java和c#、cc++的比较》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Java和C#、C/C++的比较最近在看Java,但我之前已经有了一年多C#开发的经历了。以前听人说C#是怎么抄袭Java的语法,但最近自己的亲身受就是C#是“拿来”了Java的很大一部分的思想,但觉得创新和改进也是不少的。本人也只是一个菜鸟,下面是本人随便写的一些东西,不具备权威性啊。1.Java的面向对象,具体点说,就只有PrimitiveType(原始类型)、Obejct(对象)、Object的Field(字段)和Obejct的Method(方法)这些可以操作的实际内容了。相对来说,我觉得C#面向对象的内容要完善得多,C#中的对

2、象可以拥有的东西可以有Field(字段)、Property(属性)、Method(方法)、Event(事件)、Delegate(委托)等。这比较符合现实的对象,C#可以对属性像变量一样赋值和取用,但内部同时可能会引发相关的操作,而不用像Java得使用get/set函数既不直观形象,也很麻烦。还有Java就没有过事件这一说,但实际上事件在对象上时刻是发生的,C#中为对象增加了事件一概念,可以保证对象上发生的事件能够被感兴趣的对象接收得到。2.Java没有运算符重载。3.Java中派生类必须显式调用基类的带参构造函数(如果它只有带参构造函

3、数的话)。并且写法是写在派生类构造函数的第一行。还有,同一个Java类的构造函数在相互调用时,也是在调用的构造函数体的第一行写上被调用构造函数语句。并且每个类的构造函数需且仅需调用该类其他构造函数或基类构造函数一次且仅一次。省略不写的时候,默认调用其基类的无参构造函数。如果其基类没有无参构造函数,就必须显式调用基类的有参构造函数,否则会出现错误。C#中,对构造函数调用的规定同Java,但其写法和类之间继承的写法类似,虽然没有必然关系,还是容易让人联想到,类只允许继承自一个基类,所以类的每个构造函数也只能调用一个构造函数。语法是在构造函

4、数的定义的括号后面加冒号(:)再加base(argments)(对基类构造函数的调用)或this(argments)(对自身构造函数的调用)。如derivedClass(args):base(argments){}这样的话,c#中不存在构造函数放错位置和多次调用的错误。4.Java类中的静态成员可以用实例名去访问,也可以用类名去访问,但是C#中规定只能由类名去访问。在这一点上,感觉C#要考虑得要更周到一些。毕竟有些属性是属于类而不属于实例的。5.接口的定义与使用,区别如下:(1)Java中,虚方法前面可以添加public和abstra

5、ct关键字(虽然加与不加效果是一样的),C#强制,方法前面什么都不能加。其效果都是public和abstract。(2)Java中,可以在接口中定义字段,这些字段都是static和final的(无论是否加这些关键字),所以是只读的。其字段的值要在定义的时候初始化。但C#中的接口不允许有字段的定义,可以说在应用上,算是一个不足吧,但这样可能会提高编译和运行的效率。但C#的接口中可以定义属性(实际上还是函数而已)。(3)如果一个类实现了两个接口,而恰巧两个接口中含有相同签名(不包括返回类型)的方法,二者返回类型相同或者不同。对于前种情况,

6、Java中只会对两个接口中相同签名的方法实现一次,而且无论你是用类来调用,还是转型为两种接口来调用,调用到的都是同一个函数。对于签名名相同,返回类型不同的情况,Java中是无法实现这两个接口的。因为无法对虚函数进行覆写。而对于这两种情况,C#都是有实现方法的,它在实现两个接口虚函数的时候,对相同签名的虚函数名前面加上接口的类型名,形成如:interfaceName.methodName(argumentlist)这样的实现形式,我们把这种形式叫“变形”吧。当然可以选择对其中的一者或者两者都进行这种变形。反正能够区别二者就行了。这样造成

7、的结果就是,对“变形”函数的调用,不能再通过类的实例名来调用了,而是要转型为接口之后才能调用。这也就解决了动态绑定的不确定性问题啊!(4)Java中接口可以内嵌在class中,也可以嵌套在interface中。但c#只允许接口嵌套在class中,不能嵌套在其他interface中。6.关于类型可见性,尤其在内隐类和嵌套接口的使用中,Java采用较为开放的策略,对“扩大”可见性的行为,编译器并不禁止,但是往往会导致有些方法或属性因为类型不可见而不可用。但是C#完全采用严格限制的做法,低访问级的类型不能暴露给高访问的对象。这样可以保证所有

8、可见的方法和属性始终是可用的。比如:classA{        privateclassB{        //Implementation        }        publicBgetB(){        

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。