2016-12-20 16 views
0

У нас есть родительский класс и класс ребенок, имеющий общий метод testparent() но есть разница в параметрахПереопределение метода может иметь различное количество параметров в подклассе и родительском классе? Могут ли параметры no.of отличаться?

// Родитель Класс

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); 
    } 
    } 
} 
+1

метод в настоящее время ** перегружен ** – sidgate

+0

Возможный дубликат [Полиморфизм против переопределения и перегрузки] (http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading) –

ответ

0

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

0

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

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

ChildOverriding obj = new ChilOverriding(); 

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

+0

Теперь я получил это, т.е. подпись, или мы можем сказать, что количество аргументов должно быть одинаковым как в дочернем классе, так и в родительском классе. – User6

0

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

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

Super obj = new Sub();

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

obj.someMethod()

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

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

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

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

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

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

Спасибо.:)

 Смежные вопросы

  • Нет связанных вопросов^_^