是否可以在派生类中重写静态方法?

马丁·丹尼2069:

我在基类中定义了一个静态方法,我想在其子类中重写此方法,这可能吗?

我尝试了一下,但是没有按预期工作。当我创建类B的实例并调用其callMe()方法时,将调用类A中的静态foo()方法。

public abstract class A {
  public static void foo() {
    System.out.println("I am base class");
  }

  public void callMe() {
    foo();
  }
}

Public class B {
  public static void foo() {
      System.out.println("I am child class");
  }
}
工件:

静态方法调用在编译时解决(不动态分配)。

class main {
    public static void main(String args[]) {
            A a = new B();
            B b = new B();
            a.foo();
            b.foo();
            a.callMe();
            b.callMe();
    }
}
abstract class A {
    public static void foo() {
        System.out.println("I am superclass");
    }

    public void callMe() {
        foo(); //no late binding here; always calls A.foo()
    }
}

class B extends A {
    public static void foo() {
        System.out.println("I am subclass");
    }
}

I am superclass
I am subclass
I am superclass
I am superclass

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

派生类中的重写方法

在派生类中调用重写的方法

如何在派生类中重写模板类的静态方法

基类中的静态方法反映派生类名称

是否可以在不手动将重写的克隆方法添加到C ++中的每个派生类的情况下克隆多态对象?

从派生类对象访问重写的方法

派生类模板中的条件重写

是否可以在接口的派生类中仅使用C#中的该接口的某些方法?

在Java中,如何从派生类中的重写方法中调用基类的方法?

是否可以在派生类中实现抽象方法,但只能在基类中调用抽象方法?

基类中受保护的静态属性是否是在派生类之间共享数据的良好实践?

为什么派生类重写方法不应比Java中的基类更严格?

基类构造函数在Java中调用重写方法时派生类对象的状态

对派生类中的重写方法使用基类 Doxygen 注释

创建可以在 C# 派生类中覆盖的静态行为

在C#中的派生类中重写枚举

在派生类中显示的C ++抽象类静态方法

C++:如何向前声明出现在基类的静态方法中的派生类?

使用派生类常量的基类静态方法

如何调用派生类(子类)的重写方法?

调用派生类的重写虚方法而不暴露它们

为什么基类指针指向基类中的纯虚方法而不是派生类中的重写方法?

是否可以通过在systemverilog中使用$ cast从基类访问派生类的方法?

是否可以(部分)实现抽象方法,并且仍然需要派生类也可以实现它?

在派生类中重写赋值运算符

在派生类中重写C ++模板函数

派生类中的私有重写虚拟函数

派生类是否可以具有不在C ++基类中的构造函数?

在基类或扩展Swift的静态方法中获取派生类型的类型名称