Salve,

vedendo un semplice esempio di Factory Method mi è sorto un dubbio su una particolarità implementativa, ovvero la necessità dell'upcasting, nella classe creazione concreta dell'oggetto concreto nella sua super-classe astratta...mi spiego meglio con un esempio:

AbstractObject :
Codice PHP:
public interface AbstractObject {
    public 
void aMethod();

ConcreteObject1 :
Codice PHP:
public class ConcreteObject1 implements AbstractObject {
    public 
void aMethod() {
        
System.out.println("aMethod di ConcreteObject");
    }

Creator :
Codice PHP:
public abstract class Creator {
    abstract 
AbstractObject createObject();
    
void doSomething() {
        
AbstractObject ao createObject();
        
ao.aMethod();
    }

Creator1 :
Codice PHP:
public class Creator1 extends Creator {
    @
Override
    AbstractObject createObject
() {
        return (
AbstractObject) new ConcreteObject1();
    }

Test :
Codice PHP:
public class Test {
    public static 
void main(String[] args) {
        
Creator c = new Creator1();
        
c.doSomething();
    }

L'upcasting in Creator1 è proprio necessario? A me sembra funzioni tutto anche se lo levo...

Grazie dell'attenzione,

Matteo