当前位置: 首页 > 知识库问答 >
问题:

与其他流行语言中的后期静态绑定(PHP)相当

公冶伟
2023-03-14
<?php
class A {
    public static function who() {
        echo __CLASS__;
    }
    public static function test() {
        static::who(); // Here comes Late Static Bindings
    }
}

class B extends A {
    public static function who() {
        echo __CLASS__;
    }
}

B::test(); // Outputs "B"
?>

我想在Java中得到一个等价的...所以类似于

class A {
    public static void who(){
        System.out.println("A");
    };

    public static void test(){
        who(); //<<< How to implement a static:: thing here???
    }
}

class B extends A {
     public static void who(){
        System.out.println("B");
     };

     public static void main(String[] args){
        B.test(); // Outputs "A" but I want "B"
     }
}

编辑:我知道在大多数流行的语言中没有“标准的方法”来做到这一点。我在找黑客之类的。另外,这在C/C++或任何其他流行的OOP语言中可能吗?

这不是为了任何真正的设计上的任何东西。我只是好奇而已。

共有1个答案

陈瀚玥
2023-03-14

在Java中不可能。(至少没有丑陋的反射黑客。)

我鼓励你重新考虑你的设计,并依靠适当的对象。

相关问题:

    null
  1. 重载test,使用test(class c),该test(classc),将定义预期who方法的类作为参数
  2. 隐藏(注意不能重写)test()b.
  3. 并稍微更改a.test的实现。

在代码中:

class A {
    public static void who() {
        System.out.println("A");
    }

    public static void test() {
        test(A.class);
    }

    public static void test(Class<?> c) {
        //who(); //<<< How to implement a static:: thing here???
        try {
            c.getMethod("who").invoke(null); // Call static who on given class.
        } catch (Exception e) {
        }
    }

}

public class B extends A {
     public static void who(){
        System.out.println("B");
     }

     public static void test() {
         test(B.class);
     }

     public static void main(String[] args){
        A.test(); // Outputs "A"
        B.test(); // Outputs "B"
     }
}
 类似资料:
  • JRuby Read more here: https://github.com/iconara/mikka. Groovy/Groovy++ Read more here: https://gist.github.com/620439. Clojure Read more here: http://blog.darevay.com/2011/06/clojure-and-akka-a-match

  • 扩展DatabaseObject类的用户类。.. 带有后期静态绑定的DatabaseObject类。..

  • 起初我是一个初学者 我看过很多教程,读过很多例子,甚至试图从JLS来理解这个主题,但我仍然有一些困惑或误解。 让我给你看我看不懂的问题。

  • 静态绑定还是动态绑定? 这显示了什么样的多态性?

  • 问题内容: 我目前正在为我的一个类进行分配,在其中,我必须使用Java语法给出 静态 和 动态绑定的 示例。 我了解基本概念,即静态绑定在编译时发生,而动态绑定在运行时发生,但是我无法弄清楚它们实际上是如何工作的。 我找到了一个在线静态绑定的示例,给出了以下示例: 并且这将显示“ animal is eating”,因为 对的调用使用了静态绑定,但是我不确定 为什么 将其视为静态绑定。 到目前为止

  • 本文向大家介绍PHP面向对象之后期静态绑定功能介绍,包括了PHP面向对象之后期静态绑定功能介绍的使用技巧和注意事项,需要的朋友参考一下 本文将对PHP后期静态绑定功能进行介绍,它主要用于解决在继承范围内引用静态调用的类。 首先来看下面这个例子: 很明显,结果不是我们预期的,这是因为self::取决于定义时所在的类,而不是运行中的类。为了解决这个问题,你可能会在继承类中重写status()方法,更好