| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1504 人关注过本帖
标题:读书笔记:C#与Java语法上的的区别
取消只看楼主 加入收藏
ohyesboy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2005-2-22
收藏
 问题点数:0 回复次数:4 
读书笔记:C#与Java语法上的的区别

读书笔记:C#与Java语法上的的区别

1.在方法不加访问修饰符时C#默认private 而Java默认 public 所以总是显试写出Access Modifier是好习惯

2.继承,接口的语法 C#不管是接口还是父类,要继承或实现都是用“:” 而java用extends继承,用implements实现接口 C#: class Child:ICando1,ICando2Father Java: class Chile extends Father impelments ICando1,ICando2

3.在子类中调用父类的方法 C#: void Do(string s,int i):base(s){...} Java: void Do(String s,int i){super.Do(s)}

4.java有内置类,即一个类的声明放在另一个类里面,C#没有

5.声明一个接口中的方法时,C#不允许显试的写出任何Access Modifier,天生就public 但是java可以写出public,也可以不写

6.Override,Overload,Hide C# 中写子类中有一个和父类中一样的方法,这种情况被视作Hide(隐藏)父类中的方法。 这时子类中的方法声明最好加上new,并未强制 这时子类被当作父类调用时,并未表现出多态性,实际调用了父类中的方法

Java 中写子类中有一个和父类中一样的方法,这种情况被视作override(重写) 这时子类被当作父类调用时,表现出多态性,实际调用的是子类的方法

当C#也想重写父类的方法时,必须在父类和子类的方法声明是显试的加上virtual 和override 这样就能在子类被当作父类调用时,表现出多态性,实际调用的是子类的方法

搜索更多相关主题的帖子: Java语法 笔记 接口 void int 
2005-05-04 11:20
ohyesboy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2005-2-22
收藏
得分:0 

例子:以下的分别是一段java和对应的C#代码,在C#代码中如果不加上override,virutal 的话,就会产生不同结果,如果没有public的话,就会编译错误。

看似简单的代码要求掌握很多知识才能判断出其正确结果

两段代码的结果都是: (0, 0) (2.7182798, 3.14159) (2, 3) (2, 3)

Java中的代码: // //Test.java // class Point { int x = 0, y = 0; void move(int dx, int dy) { x += dx; y += dy; } int getX() { return x; } int getY() { return y; } int color; } class RealPoint extends Point { float x = 0.0f, y = 0.0f; void move(int dx, int dy) { move((float)dx, (float)dy); } void move(float dx, float dy) { x += dx; y += dy; } int getX() { return (int)Math.floor(x); } int getY() { return (int)Math.floor(y); } } class Test { public static void main(String[] args) { RealPoint rp = new RealPoint(); Point p = rp; rp.move(1.71828f, 4.14159f); p.move(1, -1); show(p.x, p.y); show(rp.x, rp.y); show(p.getX(), p.getY()); show(rp.getX(), rp.getY()); } static void show(int x, int y) { System.out.println("(" + x + ", " + y + ")"); } static void show(float x, float y) { System.out.println("(" + x + ", " + y + ")"); } }

改成C#代码是:

// //Test.cs // public static void Main(String[] args) { RealPoint rp = new RealPoint(); Point p = rp; rp.move(1.71828f, 4.14159f); p.move(1, -1); show(p.x, p.y); show(rp.x, rp.y); show(p.getX(), p.getY()); show(rp.getX(), rp.getY()); Console.Read (); } static void show(int x, int y) { System.Console.WriteLine ("(" + x + ", " + y + ")"); } static void show(float x, float y) { System.Console.WriteLine("(" + x + ", " + y + ")"); } }

class Point { public int x = 0, y = 0; public virtual void move(int dx, int dy) { x += dx; y += dy; } public virtual int getX() { return x; } public virtual int getY() { return y; } public int color; } class RealPoint: Point { public float x = 0.0f, y = 0.0f; public override void move(int dx, int dy) { move((float)dx, (float)dy); } public void move(float dx, float dy) { x += dx; y += dy; } public override int getX() { return (int)Math.Floor(x); } public override int getY() { return (int)Math.Floor(y); } }

2005-05-04 13:31
ohyesboy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2005-2-22
收藏
得分:0 

1. java和C#里,如果加号两边都是数字的话,那么至少是int 即使两个short相加也是int

2.C#声明Array方括弧只能在变量名左边 int[] i, java里可以像C/C++那样放在右边

3.Java可以这样:int [][] i=new int [5][4]; C#不行 C#/java都可以:int [][] i=new int [5][];

4.java:instanceof----C#:is

5.Java中基本类型int long double等等不看作是对象(考虑到效率) 但是有Wrap Class:Int Float 等类可以把基本类型转换成对象 .NET中有Int32,Int64等类,有int 作为C#语言中代替Int32的“别名”

但是不知.NET中是怎样考虑性能的?

2005-05-04 17:20
ohyesboy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2005-2-22
收藏
得分:0 
可能刚才的字体太大了。
请问哪位高手知道.NET里是不是用Int32来表示整数,
整数作为一个类调用是不是开销太大了?
有没有像java中类似的技术(上一个回复中提到的)以提高性能
2005-05-04 20:15
ohyesboy
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2005-2-22
收藏
得分:0 
大家一起来讨论阿,好像对这个问题感兴趣的人不多阿
我又发现了一个不同点:java可以在类体里面直接写
static{.....}以初始化静态属性,好像C#不行吧
2005-05-04 20:21
快速回复:读书笔记:C#与Java语法上的的区别
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031265 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved