VB "Shadow" 或 C# "new" 关键字在 Java 中的等效项是什么?
What is the VB "Shadow" or C# "new" keyword Equivalent in Java?
当我想定义一个非虚拟方法的新实现时,我可以在 C# 中使用 new
关键字或在 VB 中使用 shadow
关键字。例如:
C#代码:
public class Animal
{
public void MyMethod()
{
//Do some thing
}
}
public class Cat : Animal
{
public new void MyMethod()
{
//Do some other thing
}
}
VB代码:
Public Class Animal
Public Sub MyMethod()
'Do some thing
End Sub
End Class
Public Class Cat
Inherits Animal
Public Shadows Sub MyMethod()
'Do some other thing
End Sub
End Class
现在,我的问题是:
什么是 VB Shadow
(或 C# new
)Java 中的等效关键字?
您问题的主要答案可能是 "There is none." 详情:
Java的方法默认是"virtual"(C#术语);它们可以在子类中被覆盖。原始方法不需要特殊关键字。定义覆盖时,使用 @Override
注释很有用(但不是 required),这样如果您认为自己没有覆盖,编译器就会警告您,所以阅读代码(和 JavaDoc)的人知道你在做什么。
例如:
class Parent {
public void method() {
}
}
class Child extends Parent {
@Override
public void method() {
}
}
请注意 Parent
中的 method
没有特殊关键字。
如果 Java 方法被标记为 final
(非虚拟,C# 默认值),您根本无法覆盖它。在这种情况下,没有等同于 C# 的 new
的东西。例如:
class Parent {
public final void method() {
}
}
class Child extends Parent {
@Override // <== Won't compile, you simply can't override
public void method() { // <== final methods at all (even if you added
// <== "final" to the declaration)
}
}
当我想定义一个非虚拟方法的新实现时,我可以在 C# 中使用 new
关键字或在 VB 中使用 shadow
关键字。例如:
C#代码:
public class Animal
{
public void MyMethod()
{
//Do some thing
}
}
public class Cat : Animal
{
public new void MyMethod()
{
//Do some other thing
}
}
VB代码:
Public Class Animal
Public Sub MyMethod()
'Do some thing
End Sub
End Class
Public Class Cat
Inherits Animal
Public Shadows Sub MyMethod()
'Do some other thing
End Sub
End Class
现在,我的问题是:
什么是 VB Shadow
(或 C# new
)Java 中的等效关键字?
您问题的主要答案可能是 "There is none." 详情:
Java的方法默认是"virtual"(C#术语);它们可以在子类中被覆盖。原始方法不需要特殊关键字。定义覆盖时,使用 @Override
注释很有用(但不是 required),这样如果您认为自己没有覆盖,编译器就会警告您,所以阅读代码(和 JavaDoc)的人知道你在做什么。
例如:
class Parent {
public void method() {
}
}
class Child extends Parent {
@Override
public void method() {
}
}
请注意 Parent
中的 method
没有特殊关键字。
如果 Java 方法被标记为 final
(非虚拟,C# 默认值),您根本无法覆盖它。在这种情况下,没有等同于 C# 的 new
的东西。例如:
class Parent {
public final void method() {
}
}
class Child extends Parent {
@Override // <== Won't compile, you simply can't override
public void method() { // <== final methods at all (even if you added
// <== "final" to the declaration)
}
}