Java >> Tutoriel Java >  >> Tag >> class

Est-il possible d'avoir les mêmes membres de données dans les classes parent et enfant en Java ?

La question est que "Pouvons-nous avoir les mêmes membres de données dans les classes parent/base et enfant/dérivées en Java" ?

  • Oui, il est possible d'avoir le même membre de données dans les classes Parent et Enfant .
  • Nous allons maintenant voir la capacité ou la force de la classe Parent et enfant. La référence de classe Parent peut également contenir son propre objet et un objet de classe Enfant et la référence de classe Enfant ne peut contenir que son propre objet.
  • L'objet de la classe Parent ne peut accéder qu'à ses données, ce qui signifie que cette classe n'a pas l'autorisation d'accéder aux données de la classe Enfant.
  • Avec l'aide de l'exemple, nous verrons ce qui se passera si nous contenons le même membre de données dans les deux classes [Parent et Enfant].

Exemple :

class Base {
    //  Declare and Instantiate data member  
    String str = "We are in Parent class";
}

class Derived extends Base {
    //  Declare and Instantiate data member  
    String str = "We are in Child class";
}

class Main {
    public static void main(String[] args) {
        // Creating a Base class object
        Base base = new Base();
        // Invoked Base class data member with Base class object.
        System.out.println("Base class reference can access only base class member :" + " " + base.str);

        // Creating a Derived class object
        Derived derived = new Derived();

        // Invoked Derived class data member with Derived class object.
        System.out.println("Derived class reference can access both Base and Derived class member : " + " " + derived.str);

        // Here Base class reference holding an object of
        // Derived class and it is perfectly valid
        base = new Derived();

        // Base class reference can access only Base class 
        // data member whether it is holding an object is of 
        // Base class or Derived class.
        System.out.println("Base class reference holding an object of Derived class but it can access only Base class data member :" + " " + base.str);

        // we don't need to include the below code ….
        /*
        // Here Derived class reference holding an object of
        // Base class and it is perfectly invalid
        derived = new Base();

        // If Derived class reference hold an object of Base 
        // class then we will get compile time error
        System.out.println("We will get compile time error");
        */
    }
}

Sortie

E:\Programs>javac Main.java

E:\Programs>java Main
Base class reference can access only base class member : We are in Parent class
Derived class reference can access both Base and Derived class member:  We are in Child class
Base class reference holding an object of Derived class but it can access only Base class data member: We are in Parent class

Dans le programme ci-dessus, nous avons quatre cas :

  1. Si la référence de la classe Base contient un objet de la classe Base, elle est alors parfaitement valide et nous ne pouvons accéder qu'au membre de données de la classe Base.
    Base base = new Base();
  2. Si la référence de la classe dérivée contient un objet de la classe dérivée, elle est parfaitement valide et nous pouvons accéder à la fois aux membres de données de la classe de base et de la classe dérivée.
    Derived derived = new Derived();
  3. Si la référence de la classe Base contient un objet de la classe Derived, elle est également parfaitement valide, mais elle ne peut accéder qu'au membre de données de la classe Base.
    Base base = new Derived();
  4. Si la référence de classe dérivée contient un objet de la classe de base, elle est parfaitement invalide et dans ce cas, nous obtiendrons une erreur de compilation.
    Derived derived = new Derived();

Balise Java