Error: (8192) Creation of dynamic property App\Layout\Layouts\Base\Base::$viewFile is deprecated

Quiz Liaison dynamique et Surcharge

Indiquez ce qu'affiche le code, ou errcomp s'il produit une erreur de compilation, ou errexec s'il produit une erreur d'exécution.

interface A { void a(); }
interface B { void b(); }
class C implements A { 
    String type() { return getClass().getName(); }
    void a() { System.out.println("aC"); }
}
class D extends C implements B {
    void b() { System.out.println("bD"); }
    void b(B other) { b(); other.b(); }
    void aa(C other) { a(); other.a(); }
}
class E extends D { void b() { System.out.println("bE"); } }
class F extends D { void a() { System.out.println("aF"); }
D d = new D();
E e = new E();
F f = new F();

C c = f;
System.out.println(c.type());
F

Indiquez ce qu'affiche le code, ou errcomp s'il produit une erreur de compilation, ou errexec s'il produit une erreur d'exécution.

interface A { void a(); }
interface B { void b(); }
class C implements A { 
    String type() { return getClass().getName(); }
    void a() { System.out.println("aC"); }
}
class D extends C implements B {
    void b() { System.out.println("bD"); }
    void b(B other) { b(); other.b(); }
    void aa(C other) { a(); other.a(); }
}
class E extends D { void b() { System.out.println("bE"); } }
class F extends D { void a() { System.out.println("aF"); }
D d = new D();
E e = new E();
F f = new F();

A a = f;
a.a();
aF

Indiquez ce qu'affiche le code, ou errcomp s'il produit une erreur de compilation, ou errexec s'il produit une erreur d'exécution.

interface A { void a(); }
interface B { void b(); }
class C implements A { 
    String type() { return getClass().getName(); }
    void a() { System.out.println("aC"); }
}
class D extends C implements B {
    void b() { System.out.println("bD"); }
    void b(B other) { b(); other.b(); }
    void aa(C other) { a(); other.a(); }
}
class E extends D { void b() { System.out.println("bE"); } }
class F extends D { void a() { System.out.println("aF"); }
D d = new D();
E e = new E();
F f = new F();

f.aa(e);
aF aC

Indiquez ce qu'affiche le code, ou errcomp s'il produit une erreur de compilation, ou errexec s'il produit une erreur d'exécution.

interface A { void a(); }
interface B { void b(); }
class C implements A { 
    String type() { return getClass().getName(); }
    void a() { System.out.println("aC"); }
}
class D extends C implements B {
    void b() { System.out.println("bD"); }
    void b(B other) { b(); other.b(); }
    void aa(C other) { a(); other.a(); }
}
class E extends D { void b() { System.out.println("bE"); } }
class F extends D { void a() { System.out.println("aF"); }
D d = new D();
E e = new E();
F f = new F();

C c = d;
c.b();
errcomp

Bien que l'objet D possède une méthode b(), le compilateur ne voit que le fait qu'il s'agit d'un objet de type C, qui lui n'a pas de méthode b().

Il lance donc une erreur de compilation.

Indiquez ce qu'affiche le code, ou errcomp s'il produit une erreur de compilation, ou errexec s'il produit une erreur d'exécution.

interface A { void a(); }
interface B { void b(); }
class C implements A { 
    String type() { return getClass().getName(); }
    void a() { System.out.println("aC"); }
}
class D extends C implements B {
    void b() { System.out.println("bD"); }
    void b(B other) { b(); other.b(); }
    void aa(C other) { a(); other.a(); }
}
class E extends D { void b() { System.out.println("bE"); } }
class F extends D { void a() { System.out.println("aF"); }
D d = new D();
E e = new E();
F f = new F();

C c = f;
d = c;
System.out.println(d.type());
errcomp

On ne peut pas mettre d'objet de type C dans une variable de type D car D n'est pas une super-classe de C (c'est une sous-classe).

Il aurrait été possible de compiler si c avait été casté explicitement en D (mais dans le cas présent l'erreur aurrait eu lieu à l'exécution).

Indiquez ce qu'affiche le code, ou errcomp s'il produit une erreur de compilation, ou errexec s'il produit une erreur d'exécution.

interface A { void a(); }
interface B { void b(); }
class C implements A {
    String type() { return getClass().getName(); }
    void a() { System.out.println("aC"); }
}
class D extends C implements B {
    void b() { System.out.println("bD"); }
    void b(B other) { b(); other.b(); }
    void aa(C other) { a(); other.a(); }
}
class E extends D { void b() { System.out.println("bE"); } }
class F extends D { void a() { System.out.println("aF"); }
D d = new D();
E e = new E();
F f = new F();

D other = e;
f.b(other);
bD bE

Indiquez ce qu'affiche le code, ou errcomp s'il produit une erreur de compilation, ou errexec s'il produit une erreur d'exécution.

interface A { void a(); }
interface B { void b(); }
class C implements A { 
    String type() { return getClass().getName(); }
    void a() { System.out.println("aC"); }
}
class D extends C implements B {
    void b() { System.out.println("bD"); }
    void b(B other) { b(); other.b(); }
    void aa(C other) { a(); other.a(); }
}
class E extends D { void b() { System.out.println("bE"); } }
class F extends D { void a() { System.out.println("aF"); }
D d = new D();
E e = new E();
F f = new F();

f.aa((F) d);
errexec

Le cast explicite de d en F est autorisé à la compilation, mais à l'exécution la jvm se rend compte que d n'est pas un sous-type de F.

Indiquez ce qu'affiche le code, ou errcomp s'il produit une erreur de compilation, ou errexec s'il produit une erreur d'exécution.

interface A { void a(); }
interface B { void b(); }
class C implements A { 
    String type() { return getClass().getName(); }
    void a() { System.out.println("aC"); }
}
class D extends C implements B {
    void b() { System.out.println("bD"); }
    void b(B other) { b(); other.b(); }
    void aa(C other) { a(); other.a(); }
}
class E extends D { void b() { System.out.println("bE"); } }
class F extends D { void a() { System.out.println("aF"); }
D d = new D();
E e = new E();
F f = new F();

C other = e;
d.b(other);
errcomp

Lorsque d.b(other); est appelé, la méthode b() demande un objet other de classe B, mais l'objet passé est de classe C, qui n'est pas compatible avec B.

Indiquez ce qu'affiche le code, ou errcomp s'il produit une erreur de compilation, ou errexec s'il produit une erreur d'exécution.

interface A { void a(); }
interface B { void b(); }
class C implements A { 
    String type() { return getClass().getName(); }
    void a() { System.out.println("aC"); }
}
class D extends C implements B {
    void b() { System.out.println("bD"); }
    void b(B other) { b(); other.b(); }
    void aa(C other) { a(); other.a(); }
}
class E extends D { void b() { System.out.println("bE"); } }
class F extends D { void a() { System.out.println("aF"); }
D d = new D();
E e = new E();
F f = new F();

C c = e;
if (c instanceof B) System.out.println)("yes");
else System.out.println("no");
yes

Indiquez ce qu'affiche le code, ou errcomp s'il produit une erreur de compilation, ou errexec s'il produit une erreur d'exécution.

interface A { void a(); }
interface B { void b(); }
class C implements A { 
    String type() { return getClass().getName(); }
    void a() { System.out.println("aC"); }
}
class D extends C implements B {
    void b() { System.out.println("bD"); }
    void b(B other) { b(); other.b(); }
    void aa(C other) { a(); other.a(); }
}
class E extends D { void b() { System.out.println("bE"); } }
class F extends D { void a() { System.out.println("aF"); }
D d = new D();
E e = new E();
F f = new F();

B b = f;
((C) b).a();
aF

Normalement le compilateur interdit les casts explicites si les deux types n'ont pas de relation.

Mais ici le compilateur le permet car B est une interface et pas une classe. Une sous-classe de B pourrait avoir une relation avec C (ce qui est le cas dans l'exemple).

Indiquez ce qu'affiche le code, ou errcomp s'il produit une erreur de compilation, ou errexec s'il produit une erreur d'exécution.

interface A { void a(); }
interface B { void b(); }
class C implements A { 
    String type() { return getClass().getName(); }
    void a() { System.out.println("aC"); }
}
class D extends C implements B {
    void b() { System.out.println("bD"); }
    void b(B other) { b(); other.b(); }
    void aa(C other) { a(); other.a(); }
}
class E extends D { void b() { System.out.println("bE"); } }
class F extends D { void a() { System.out.println("aF"); }
D d = new D();
E e = new E();
F f = new F();

e = (E)f;
errcomp

errcomp

Le cast explicite est entre deux classes qui n'ont pas de relation entre elles.