У меня вопрос о наследовании в Java.
У меня есть два класса A и B, а класс B,  наследует от A:
public class A {
     public A() {
         System.out.println("Hi!");
     }
}
public class B extends A {
     public B() {
         System.out.println("Bye!");
     }
     public static void main(String[] args) {
         B b = new B();
     }
}
Когда я запускаю программу B, вывод:
Hi!
Bye!
Вопрос: почему вызывается конструктор из
class A, когда я создаю и объектclass B?
Я знаю, что B наследует все от A - все переменные экземпляра или класса и все методы, и в этом смысле объект B имеет все характеристики A плюс некоторые другие характеристики, определенные в B. Однако я не знал и не предполагал, что когда я создаю объект типа B, также вызывается конструктор A. Итак, пишу это:
B b = new B();
создает Два объекта - один из типов B и один из типов A.
Это становится интересным,
может кто-нибудь объяснить, почему именно это происходит?
