Ограничения переопределения методов в Java

Переопределение методов в 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. Является ли мое понимание правильно? Я упускаю что-то еще более актуально?

5
задан Deva 7 September 2011 в 20:28
поделиться