Переопределение методов в Java имеют следующие функции:
1> Метод переопределения должен иметь тот же список аргументов, что и метод родительского класса.
2> Тип возврата должен быть тот же / подкласс возвращаемого типа для метода родительского класса.
3> Уровень доступа должен быть одинаковым или менее ограничительным в качестве метода родительского класса.
4> Метод переопределения может бросить одинаковое или уже исключение, а не более широкий.
* Просто хотел знать, почему это так для точка *
* 2 - Почему подкласс почему не суперкласс? *
3 - Почему уровень доступа должен быть меньше Ограничительный?
4 - почему он должен бросать узкое исключение?
Согласно моему пониманию его только что если я создаю родительский класс Crease, чтобы создать объект класса ребенка и пытаться запустить каждый сценарий
Позволяет предположить A - это родительский класс и B - это детский класс , имеющих метод PrintAndReturnUsomething ()
public class A{
public B printAndReturnSomething(){
S.O.P("Inside A Print");
return new B();
}
}
Теперь у нас есть детский класс B как
public class B extends A{
public A printAndReturnSomething(){ // I know this isn't possible to return A but had it been then
S.O.P("Inside A Print");
return new A();
}
}
сейчас, если я сейчас Сделайте что-то вроде этого
A a =new B();
, и теперь, когда у меня есть ссылка на a, поэтому я ожидаю, что тип возврата имеет тип B
B returnedValue=a.printAndReturnSomething(); // But it actually calls the child class method and hence returns A. So here comes the contradiction.
Analalaly для сценариев 3 и 4. Является ли мое понимание правильно? Я упускаю что-то еще более актуально?