Переопределение метода может иметь различное количество параметров в подклассе и родительском классе? Могут ли параметры no.of отличаться?

У нас есть родительский класс и дочерний класс, имеющий общий метод testparent() но есть разница в параметрах

// Родительский класс

  public class Overriding {

    int a,b,c;

   //Parameters are different in number

    public void testParent(int i, int j) {

       System.out.println(a+b);
    }
}
//Child Class Extending Parent Class Method
 class ChildOverriding extends Overriding {
      int c;

   public void testParent(int i,int j,int k) {

        System.out.println(a+b+c);
   }
  //Main Is not getting executed????
   public static void main(String args[]) {
     Overriding obj = new ChildOverriding();
     obj.testParent(1,4,8);
     }
  }
}

3 ответа

Решение

Подкласс Overriding Means должен иметь такую ​​же сигнатуру метода базового класса. Параметры и тип возвращаемого значения должны быть одинаковыми.

На самом деле ваша проблема здесь в том, что вы обращаетесь к методу из SubClass через эталонный объект SuperClass.

Позвольте мне объяснить немного больше.

Super obj = new Sub();

Эта строка создаст одну ссылочную переменную (класса Super) с именем obj и сохранить его в памяти стека и экземпляр new Sub() со всеми деталями реализации будут храниться в области памяти кучи. Таким образом, после этого адрес памяти экземпляра, хранящийся в куче, связывается с ссылочной переменной, хранящейся в памяти стека.

obj.someMethod()

Теперь, когда мы вызываем любой метод (например, someMethod) по ссылочной переменной obj он будет искать сигнатуру метода в суперклассе, но когда он вызывает реализацию someMethod он будет вызывать его из экземпляра, хранящегося в области памяти кучи.

Вот причина, по которой нельзя разрешать отображение из Super в Sub класс (например, Sub obj = new Super();) потому что подкласс может иметь более конкретную сигнатуру метода, которая может быть вызвана, но экземпляр, сохраненный в области кучи, может не иметь реализацию этого вызванного метода.

Таким образом, ваша программа выдает ошибку только потому, что не может найти сигнатуру метода, которую вы вызываете в суперклассе.

Просто помните, что Java всегда будет искать сигнатуру метода только в типе ссылочного объекта.

Ответ на ваш вопрос Yes, we can have different number of parameters in subclass's method but then it won't titled as method overloading/overriding. потому что перегрузка означает, что вы добавляете новое поведение, а переопределение означает изменение поведения.

Извините за мой плохой английский, и если я где-то ошибаюсь, пожалуйста, дайте мне знать, так как я изучаю Java.

Благодарю.:)

Вы можете иметь два метода, но затем один в ChildOverriding не переопределяют один в Overriding, Это два независимых метода.

Чтобы исправить проблему компиляции, вы должны либо объявить objChildOverriding

ChildOverriding obj = new ChilOverriding();

или вы должны также реализовать метод трех аргументов в Overriding

Другие вопросы по тегам