Я пытаюсь использовать динамический метод вызова в java и не могу понять, почему Java не позволяет мне вызывать метод из подкласса, а не метод суперкласса.Поиск динамического метода в Java
Например: Если у меня есть 2 класса Test
и Test2
. Test2 наследует от класса Test
Метод someFunction()
переопределяется в подклассе:
Тест класс
public class Test {
public Test(){
System.out.println("I am Test class constructor called with no values");
}
public void someFunction(){
System.out.println("I am some function belonging to Test Class");
}
}
И Test2 класс:
public class Test2 extends Test{
public Test2(){
System.out.println("Constructor of Test2 with no values");
}
public void somFunction(){
System.out.println("I am someFunction overridden in Test2");
}
}
Итак, когда Я стараюсь экземпляр класса Test таким образом:
Test t1 = new Test2();
t1.someFunction(); // this should call Test2.someFunction()
Выход я получаю:
I am Test class constructor called with no values
Constructor of Test2 with no values
I am some function belonging to Test Class
Так что мой вопрос: Когда я вызываю метод someFunction()
с использованием object t1
почему он вызывает метод принадлежит суперкласс вместо того, который находится в подклассе, даже когда я инициализирую объект подклассом.
Я всегда думал, что динамический вызов используется таким образом, что класс, с которым вы инициализируете объект, методы этого класса называются i.e в основном переопределенный метод следует вызывать вместо родительского метода.
Динеш
Чтобы избежать такой ошибки, используйте аннотацию @Override – leonbloy