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

Quiz Classes, visibilité et héritage

Écrivez les modificateurs d'accès dans l'ordre de visibilité croissante. Séparez les modificateurs par des virgules, sans espace.

private,package,protected,public

Peut-on créer une sous-classe de la classe suivante?

class A
{
    private A()
    {
        // premier constructeur
    }

    private A(int i)
    {
        // deuxième constructeur
    }
}
Faux

Tous les constructeurs de la classe sont privés, on ne peut donc pas l'instancier

L'attribut i de la classe A, la classe B peut-elle l'hériter?

class A
{
    protected int i;
}

class B extends A
{

}
Vrai

Le code suivant est-il écrit correctement?

package pack1;

class A
{

}

package pack2;

class B extends A
{

}
Faux

Une classe sans modificateur d'accès ne peut pas être héritée en dehors du package.

Le programme suivant est-il écrit correctement? Si oui, qu'affiche-t-il, si non répondez non?

package pack1;

class X
{
    protected int i = 1221;

    void methodOfX()
    {
        System.out.println(i);
    }
}

public class MainClass
{
    public static void main(String[] args)
    {
        X x = new X();
        System.out.println(x.i);
        x.methodOfX();
    }
}
1221 1221

La méthode main peut accéder à la variable protected car elle est dans le même package.

Pourquoi ne peut-on pas instancier la classe A dans le code suivant en dehors du package, bien qu'elle ait un constructeur public?

package pack1;

class A
{
    public A()
    {
        // constructeur public
    }
}

package pack2;

import pack1.*;

class B
{
    A a = new A();       // erreur de compilation
}
Car la classe A a une visibilité limité au package

Un attribut protégé d'une classe peut-il être hérité par une sous-classe en dehors du package?

Vrai

Que va afficher le programme suivant?

package pack1;

public class A
{
    private int methodOne(int i)
    {
        return ++i;
    }

    public int methodTwo(int i)
    {
        return methodOne(++i);
    }
}

package pack2;

import pack1.A;

class B extends A
{
    int methodOne(int i)
    {
        return methodTwo(++i);
    }
}

public class MainClass
{
    public static void main(String[] args)
    {
        System.out.println(new B().methodOne(101));
    }
}
104

Trouvez l'erreur dans le code suivant:

class A
{
    public void methodOfA()
    {
        System.out.println("Class A");
    }
}

class B extends A
{
    @Override
    void methodOfA()
    {
        System.out.println("Class B");
    }
}

La visibilité de methodOfA a été réduite au niveau package (car modificateur d'accès par défaut). On ne peut pas réduire la visibilité dans une sous-classe.

Une méthode privée peut être redéfinie comme publique?

Faux
Les méthodes privées ne sont pas héritées du tout.