- Java 有静态导入,既可以导入静态方法和字段。 .NET没有
- Java里package和文件夹对应关系是强制的,要改都改。而C#中namespace和文件夹可以不对应,C# 更喜欢在一个project下所用源文件的namespace都一样,即使在不同文件夹下的C#源文件。
- Java 中子类override父类方法,只要方法签名相同即可。 C#中子类方法必须加上override,否则变成了隐藏, 编译器会出警告, 建议子类方法前加new。
同时,C#重写时,父类方法要加virtual,而java不需要,java默认实例方法为虚方法。
- Java 中的super相当C#中的base
- Java中子类重写方法的访问控制级别(大)和返回值(小)可以不同与父类的,C#必须一致
- Java有初始化块,C#没有。当Java创建一个对象时,先为该对象实例Field分配内存,声明,再执行初始化块或声明Field时指定的初始值,再执行构造器。
- Java基本数据类型会对应包装类,如int->Integer,而C#自动帮助做了封装
- Java 接口可放静态常亮,c#不可以
- 只有Java有Checked异常,要么在当前方法处理,要么在方法定义声明抛出该异。其他语言的异常都属于Runtime异常
- Java:类全名=包名+类名 C#:类全名=命名空间+类名
- Java接口可定义字段(static final),C#不行
- C#没有类型通配符,Java中大多数时间可以用泛型方法代替类型通配符。 以下两个方法等价
public void Set(List<? extends Testable> l){}
public <M extends Testable> void Set1(List<M> l){}