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