Есть ли Java эквивалентный модификатору 'new' в C#?
Возможный дубликат:
Есть ли "новый" модификатор для методов в Java?
В C# метод подкласса может быть изменен как новый.
Одно использование нового модификатора для явного скрытия члена, унаследованного от базового класса.
Есть ли такое же ключевое слово в Java?
2 ответа
Нет.
В C# вы используете new, чтобы скрывать / скрывать не виртуальные функции базового класса. Вам нужно это ключевое слово в C#, потому что вы не можете переопределить не виртуальные функции.
В Java все функции являются виртуальными по умолчанию, поэтому вы всегда можете переопределить их, и вам не нужно ключевое слово, такое как new.
Надеюсь это поможет.
В C# любой метод, который вы хотите переопределить из базового цикла, должен быть abstract
, virtual
или override
сам. Новое ключевое слово фактически не выполняет переопределение. Это работает немного по-другому:
Если вы объявляете функцию с ключевым словом new, скрывая функцию базового класса, ЭТА реализация будет использоваться, только если у вас есть объект того же дочернего типа. Пример:
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();
Вы можете увидеть разницу нового ключевого слова по сравнению с типичным переопределением: если расширяющий класс приведен к родительскому ClassType, переопределяющие функции (возвращающие Землю вместо World) все равно будут действовать, а новые функции - нет (Привет НЕ возвращается вместо Привет).