Может ли кто-нибудь объяснить, почему мне нужно создавать подкласс? - PullRequest
0 голосов
/ 30 мая 2020

Почему вам нужно создавать экземпляр subclass () в mymethod ()? Я думал, что нам нужно создавать объекты только в методе main () (что и здесь делается) Почему мы должны делать это дважды? Есть ли здесь особое свойство наследования?

class Super_class {
   int num = 20;

   // display method of superclass
   public void display() {
      System.out.println("This is the display method of superclass");
   }
}

public class Sub_class extends Super_class {
   int num = 10;

   // display method of sub class
   public void display() {
      System.out.println("This is the display method of subclass");
   }

   public void my_method() {
      // Instantiating subclass - why do you have to do this?
      Sub_class sub = new Sub_class();

      // Invoking the display() method of sub class
      sub.display();

      // Invoking the display() method of superclass
      super.display();

      // printing the value of variable num of subclass
      System.out.println("value of the variable named num in sub class:"+ sub.num);

      // printing the value of variable num of superclass
      System.out.println("value of the variable named num in super class:"+ super.num);
   }

   public static void main(String args[]) {
      Sub_class obj = new Sub_class();
      obj.my_method();
   }
}

Ответы [ 3 ]

2 голосов
/ 30 мая 2020

Вам не нужно делать то, что вы сделали в подклассе. Когда вы находитесь внутри класса, вам не нужно создавать его экземпляр для вызова его атрибута и методов: вы можете сделать это напрямую, поэтому достаточно сделать это:

  public void my_method() {

  // Invoking the display() method of sub class
  display();

  // Invoking the display() method of superclass
  super.display();

  // printing the value of variable num of subclass
  System.out.println("value of the variable named num in sub class:"+ num);

  // printing the value of variable num of superclass
  System.out.println("value of the variable named num in super class:"+ super.num);
  }
0 голосов
/ 30 мая 2020

Вам не нужно создавать экземпляр нового объекта, и я бы счел это плохой практикой кодирования. Что вам нужно сделать, так это сослаться на текущий объект с помощью ключевого слова this или просто вызвать display();, что неявно означает this.display();. Если вы создаете новый объект, если есть какие-либо установленные переменные экземпляра, они будут сброшены до значений по умолчанию, потому что экземпляр, на который вы ссылаетесь, не является тем же экземпляром, на котором был вызван метод, поэтому вы можете получить неожиданное поведение.

0 голосов
/ 30 мая 2020

Вам не нужно этого делать, вы можете вызвать метод display подкласса с ключевым словом this или даже без него внутри my_method () вам не нужен объект подкласса.

Но то, что вы здесь сделали, просто создало новый объект внутри my_method (), так что в основном ваш метод my_method () и методы display () вызываются другим объектом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...