Здравствуйте. Подскажите в каких ЯП присутствует возможность динамически локально переопределять методы класса?
Что-то вроде такого(слово public не писал просто, чтобы не мешалось, а так методы публичные):
class A {
int id() {
return 0;
}
}
class App {
static A make() {
return new A();
}
static void print(A a) {
System.out.println(a.id());
}
class B overrides A { // класс B равнозначен классу A,
int id() { // но переопределяет метод id()
return 1;
}
}
static void forObject(A a) {
print(a); => 0
print(a as B); // => 1
print(a as A {
int id() {
return 2;
}
}); // => 2
print(a); => 0
}
static void forClass(A a) {
print(a); => 0
override A as B;
print(a); // => 1
override A {
int id() {
return 2;
}
}
print(a); // => 2
}
static void main(String[] args) {
A a = make();
print(a); => 0
forObject(a);
forClass(a);
print(a); => 0
}
}
Или хотя бы часть из того, что есть в примере.
P.S. Классово/методовое ООП не обязательно, процедуры или функции тоже подойдут.
P.P.S. Кроме CL =)