interface Base { } 
 
class Derivado1 implements Base { 
   int n = 5; 
} 
 
class Derivado2 extends Derivado1 { 
   String s = "hola"; 
} 
 
void main( ) { 
   Derivado1 d1 = new Derivado1( ); 
   Derivado2 d2 = new Derivado2( ); 
   Base[] arr = { null, d1, d2 };         // el elemento extra al inicio es para que d1 esté en el indice 1 y d2 esté en el índice 2 
 
   Scanner sc = new Scanner(System.in); 
   int opcion = sc.nextInt( );            // pedir un índice (1 para d1, 2 para d2)
   Base p = arr[opcion];                 
 
   if (p instanceof Derivado1 v) { 
      System.out.println(v.n);            // imprimiendo el entero de Derivado1 (notar que un Derivado2 es compatible con Derivado1, así que también entra a este if)
   } 
 
   if (p instanceof Derivado2 v) { 
      System.out.println(v.s);            // imprimiendo la cadena de Derivado2
   } 
} 
