Si vous écrasez un champ dans une sous-classe d'une classe, la sous-classe a deux champs avec le même nom (et type différent)?

StackOverflow https://stackoverflow.com/questions/9414990

  •  12-11-2019
  •  | 
  •  

Question

J'ai 3 cours:

public class Alpha {
    public Number number;
}

public class Beta extends Alpha {
    public String number;
}

public class Gama extends Beta {
    public int number;
}

Pourquoi le code suivant compile-t-il? Et pourquoi le test passe-t-il sans aucune erreur d'exécution?

@Test
public void test() {
    final Beta a = new Gama();
    a.number = "its a string";
    ((Alpha) a).number = 13;
    ((Gama) a).number = 42;

    assertEquals("its a string", a.number);
    assertEquals(13, ((Alpha) a).number);
    assertEquals(42, ((Gama) a).number);
}

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top