Bonjour,
J'ai une classe B qui hérite de A. Cette classe B contient un attribut de type String alors que la classe A n'en a pas.
Quelqu'un peut-il m'expliquer pourquoi quand je caste une instance de B en A je ne perds pas l'attribut ? Pourtant A n'a pas d'attribut !
Voici le programme de test:
et la sortie:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 public class Main { class A { } class B extends A{ public String s = "hello"; } public static void main(String[] args) { Main m = new Main(); m.heritage(); } private void heritage() { A a = new A(); B b = new B(); if (a instanceof A) { System.out.println("a instanceof A"); } if (a instanceof B) { System.out.println("a instanceof B"); } if (b instanceof A) { System.out.println("b instanceof A"); } if (b instanceof B) { System.out.println("b instanceof B"); } if (a.getClass().equals(A.class)) { System.out.println("a.getClass().equals(A.class)"); } if (a.getClass().equals(B.class)) { System.out.println("a.getClass().equals(B.class)"); } if (b.getClass().equals(A.class)) { System.out.println("b.getClass().equals(A.class)"); } if (b.getClass().equals(B.class)) { System.out.println("b.getClass().equals(B.class)"); } b.s = "bonjour"; A a2 = (A) b; B b2 = (B) a2; System.out.println("A a2 = (A) b; B b2 = (B) a2;"); System.out.println("b2.s = " + b2.s); } }
a instanceof A
b instanceof A
b instanceof B
a.getClass().equals(A.class)
b.getClass().equals(B.class)
A a2 = (A) b; B b2 = (B) a2;
b2.s = bonjour
Partager