I've been trying to teach myself inheritance using java, but I am really confused and it seems online youtube videos/looking at previous questions are not helping at all. I tried the practice problems on this website: http://javaconceptoftheday.com/java-inheritance-practice-coding-questions/ , but I am having trouble with questions 2, 3, and 7.
In question 2, since the constructor of object a is B(), why wouldn't it print class B's i value instead of class a's? Instead it prints class a's and I have no idea why.
In question 3, is the reason that the program prints 1 2 3 because there are no constructors and it's just the function? I know when you inherit from a class, you basically act as if all of its functions are in the subclass, so do you basically just pretend class C says:
System.out.println(1);
System.out.println(2);
System.out.println(3);?
In question 7, since the constructor is a C() constructor, why does it still go through the code in the constructor for class A and class B?
Thank you for any help you can give, inheritance is just one of the topics I did not cover in my intro to programming class so I'm trying to fill in all of the blanks before fall semester starts.
Code for question 2:
class A
{
    int i = 10;
}
class B extends A
{
    int i = 20;
}
public class MainClass
{
    public static void main(String[] args)
    {
        A a = new B();
        System.out.println(a.i);
    }
}
Code for question 3:
class A
{
    {
        System.out.println(1);
    }
}
class B extends A
{
    {
        System.out.println(2);
    }
}
class C extends B
{
    {
        System.out.println(3);
    }
}
public class MainClass
{
    public static void main(String[] args)
    {
        C c = new C();
    }
}
Code for question 7:
class A
{
    public A()
    {
        System.out.println("Class A Constructor");
    }
}
class B extends A
{
    public B()
    {
        System.out.println("Class B Constructor");
    }
}
class C extends B
{
    public C()
    {
        System.out.println("Class C Constructor");
    }
}
public class MainClass
{
    public static void main(String[] args)
    {
        C c = new C();
    }
}
 
     
    