Может быть так проще будет?
Класс В наследует методы и переменные
класса A. И когда мы вызываем метод
объект В, то он может использовать методы и переменные
объекта А, также можно представить объект В, как объект А, но поведение будет все равно, как у объекта В.
В моем примере произошел вызов переопределённого метода b класса B с последующим вызовом родительского оригинального метода класса A. Причем видно, что принудительная кастенация (приведение типов) класса В к классу А - ничего не меняет, как был объект класса В, так он и остался, с переопределённым методом.
И еще, объектом обычно называют экземпляр класса, то, что образовалось после new.
package jtests;
import java.lang.System;
public class MyTest {
class A {
String a () {
return("from A:a");
}
String b() {
return("from A:b - " + a());
}
}
class B extends A {
@Override String b() {
return ("from B:b - " + super.b());
}
}
public static void main(String[] args) {
MyTest m = new MyTest();
System.out.println("A");
A a = m.new A(); // Используем A
System.out.println(a.getClass().getName() + " * " + a.b());
System.out.println("B");
B b = m.new B(); // Используем B
System.out.println(b.getClass().getName() + " * " + b.b());
System.out.println("B -> A");
A ab = (A) m.new B(); // Используем B как A
System.out.println(ab.getClass().getName() + " * " + ab.b());
}
}
И Вывод:
A
jtests.MyTest$A * from A:b - from A:a
B
jtests.MyTest$B * from B:b - from A:b - from A:a
B -> A
jtests.MyTest$B * from B:b - from A:b - from A:a