不需要。
C#中使用new来隐藏/屏蔽基类的非虚函数。你需要在C#中使用这个关键字,因为你不能重写非虚函数。
在Java中,默认情况下所有函数都是虚函数,因此你可以随时重写它们,无需像new这样的关键字。
希望这可以帮助到您。
final
。。) - user166390class TopClass
{
public String getHello()
{
return "Hello";
}
public virtual String getWorld()
{
return "World";
}
}
class ChildClass : TopClass
{
public new String getHello()
{
return "Hi";
}
public override string getWorld()
{
return "Earth";
}
}
TopClass tc = new TopClass();
Console.WriteLine(tc.getHello() + " " + tc.getWorld()); // Hello World
ChildClass cc = new ChildClass();
Console.WriteLine(cc.getHello() + " " + cc.getWorld()); // Hi Earth
TopClass tc2 = new ChildClass();
Console.WriteLine(tc2.getHello() + " " + tc2.getWorld()); // Hello Earth
Console.ReadLine();
相比于典型的覆盖,你可以看到新关键字的区别:
如果扩展类被转换为父类类型,那么重写函数(返回地球而不是世界)仍然有效,而新函数则不会生效(不会返回Hi而不是Hello)。
new
。也许重新设计会更好? - horgh