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:

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);
 
    }
}
et la sortie:

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