可能重复:
Is there a ‘new’ modifier for methods in Java?在C#中是否存在与“新”修饰符相当的Java?
在C#中,子类的方法可以modified as new。
新修饰符用于显式隐藏从基类继承的成员的一种用法。
Java中是否存在相同的关键字?
可能重复:
Is there a ‘new’ modifier for methods in Java?在C#中是否存在与“新”修饰符相当的Java?
在C#中,子类的方法可以modified as new。
新修饰符用于显式隐藏从基类继承的成员的一种用法。
Java中是否存在相同的关键字?
号在使用新的来隐藏C#/阴影基类的非虚函数。你需要C#中的这个关键字,因为你不能覆盖非虚拟的函数。
在Java中,默认情况下所有函数都是虚拟的,因此您可以随时重写它们,并且不需要关键字,如new。
希望这会有所帮助。
(然后有人去做最后的方法..) – 2013-01-16 08:44:32
在C#中,您想要从基数位置覆盖的任何方法需要为abstract
,virtual
或override
本身。新关键字实际上不会覆盖。它有点不同:
如果你用new关键字声明了一个函数,隐藏了一个基类的函数,THIS实现将只在你有一个相同的子类型的对象时使用。例如:
class 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();
你可以看到相比于典型的覆盖new关键字的区别: 如果扩展的类浇铸为父母类类别,最重要的函数(返回地球而不是世界)将仍然有效,而新函数不是(Hi不返回而是Hello)。
+1的例子。有关基类方法在转换为泛型(topclass)类型时的使用方法。 – Destrictor
简短回答:否 –
可能在C#中避免使用'new'。也许重新设计会更好? – horgh