Sono uno sviluppatore Java / C # / PHP, attraverso la mia esperienza di programmazione OOP mi trovo a fare la stessa domanda: Perché i membri statici non possono essere astratti e non implementano il polimorfismo specialmente in situazioni che coinvolgono metodi di fabbrica, ad esempio:
abstract class Resource {
public void doSomething();
}
abstract class User<resource extends Resource> {
//if i want to instantiate resource,
//my only option here is to create an abstract factory in user class
protected abstract resource create();
public void use(){
create().doSomething();
}
}
class FileUser extends User<File> {
//It's a bit clumsy, isn't it?
@Override
protected Internet create() {
return new File();
}
}
quando i metodi statici astratti mi libererebbero da queste fabbriche astratte: (Sotto non è un codice valido)
abstract class Resource {
public void doSomething();
//Im not sure how the child class would get passed though
static abstract Resource create();
}
abstract class User<resource extends Resource> {
public void use(){
resource.create().doSomething();
}
}
Quindi qualcuno sa perché questo tipo di comportamento non sarebbe approvato in OOP? Scusa se sembra una domanda stupida.