На самом деле ваша проблема заключается в том, что вы получаете доступ к методу из 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.
Спасибо.:)
метод в настоящее время ** перегружен ** – sidgate
Возможный дубликат [Полиморфизм против переопределения и перегрузки] (http://stackoverflow.com/questions/154577/polymorphism-vs-overriding-vs-overloading) –