VB的“影子”是什么?或者c# "new"Java中的关键字等价

本文关键字:quot new Java 关键字 影子 是什么 或者 VB | 更新日期: 2023-09-27 18:17:20

当我想定义一个非虚方法的新实现时,我可以使用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中的等效是什么?

VB的“影子”是什么?或者c# "new"Java中的关键字等价

你的问题的主要答案可能是"没有"。细节:

Java的方法默认是"虚拟的"(c#术语);它们可以在子类中被重写。在原方法上不需要特殊的关键字。在定义重写时,使用@Override注释是有用的(但不是必需的),这样编译器就会警告你,如果你认为你没有重写,那么阅读代码(和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)
    }
}