<?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"
?>
Quiero conseguir un equivalente en Java ... así que algo comoEquivalente a finales de unión estática (PHP) en otros idiomas populares
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"
}
}
Quiero la llamada who()
dentro A::test
para resolver como en PHP 5.3 llamando al B::who
.
EDIT: Sé que no hay una "forma estándar" de hacer esto en la mayoría de los idiomas populares. Estoy buscando hacks y tal. Además, ¿esto es posible en C/C++ o en cualquier otro lenguaje OOP popular?
Esto no es para ningún diseño real en nada. Solo estoy siendo curioso.
Eso es un rollo. Entonces, debido a que es una función estática, técnicamente no se puede modificar y la capacidad de llamarlo como B.test() es solo una pequeña conveniencia dada a los usuarios. Por lo tanto, puede tomarse la libertad de descartar la información de tipo en el sitio de llamada. ¿Estoy en lo correcto? – jetru
Ok, voy a dejar esto encendido por un tiempo, alguien brillante podría tener una idea genial. – jetru
Estaba incorrecto sobre el compilador. Vea mi respuesta, aunque todavía no resuelve el problema completo. –