Java开发人员在C中错过的特性:1、较终关键词
多态性是面向对象语言的定义属性之一,没有虚拟方法是不可能的。虚方法的函数可以被继承它的任何类重写。在Java中,默认情况下假设每个方法都是虚拟的,并且可以使用final关键字使其成为非虚拟的。相反,在C#中,默认情况下所有方法都是非虚拟的,因此直接等效的关键字将没有任何用处。
在Java中,较后一个关键字可以应用于变量、方法或类。在每种情况下,关键字都有类似的结果。较后一个变量将作为常量,其值将是固定的。不能重写final方法,也不能扩展final类。

要防止类从C#中继承,可以使用sealed关键字。对于非类字段,有两个不同的关键字可用于防止修改。Readonly用于运行时常量,而const用于编译时常量。基本上,当使用const关键字时,常量的值必须显式声明并在编译时计算,而只读字段的值由构造函数赋值,但直到运行时才计算。
2、协变方法返回类型
尽管这种差异很微妙,用例也相当少见,但Java中协变返回类型的存在可以使您不必创建新方法。
基本上,在C#中,重写基类中方法的子类中的方法必须与基类中方法的名称、参数类型和返回类型相匹配。在这种情况下,重写方法对于返回类型是不变的,如果要缩小返回类型的范围,必须创建一个新方法。
Java代码片段在Pants子类中重写Cloth方法时,缩小了Cloth方法的返回类型,所以是Pants。NewCloth返回Jeans类型,它是Cloth方法的一个子类型。通常,这是处理继承层次结构的更理想的方法。