У меня супер класс:
public class SuperClass {
public void dosomething() {
firstMethod();
secondMethod();
}
public void firstMethod() {
System.out.println("Super first method");
}
public void secondMethod() {
System.out.println("Super second method");
}
}
Подкласс:
public class SubClass extends SuperClass {
public void dosomething() {
super.dosomething();
}
public void firstMethod() {
System.out.println("Sub first method");
}
public void secondMethod() {
System.out.println("Sub second method");
}
}
Тестовый класс:
public static void main(String[] args) {
SubClass sub = new SubClass();
sub.dosomething();
SuperClass sup = new SuperClass();
sup.dosomething()
}
когда я запускаю тестовый метод, я получаю это:
Sub first method
Sub second method
Можете ли вы сказать мне, как это произошло? В методе подкласса dosomething
я вызвал super.dosomething()
и думаю, что будет вызван супер-метод, но был вызван метод переопределения в подклассе.
если я сделаю это:
SuperClass superClass = new SuperClass();<br/>
superClass.dosomething();
Результат:
Супер первый метод
Супер второй метод
Разница заключается в месте вызова метода. Я думаю, должно быть что-то, чего я не знаю):
упс, в первом примере суперссылка указывала на подкласс ...
вот так:
SuperClass sub = new SubClass();<br/>
sub.firstMethod();<br/>
sub.secondMethod();<br/>