И так, в ходе изучения языка Java никак не могу понять что такое ссылочный тип и для чего его нужно указывать при объявлении экземпляра класса. С классом String, к примеру, всё вроде бы понятно: Что такое ссылочный тип данных - 1
//Создаётся ссылка типа String
String s = "Ссылка на объект, представляющий собой строку";
Но вся ясность исчезает, когда используется подобный подход: Допустим, имеются два класса: A (с методом a1) и B (с методом b1).
class A
{
    public static void a1()
    {
        ///
    }
}

class B
{
    public static void b1()
    {
        ///
    }
}
Так же имеется класс с main методом, в котором к примеру, создаётся объект класса AB.
class GetTypeVar
{
    public static void main(String[] args)
    {
        A obj1 = new A();
        B obj2 = new B();
    }
}
Так, собственно, в чём непонимание:
  • Что означает тип создаваемой переменной в данном случае?
  • Какой тип данных имеется ввиду?
Особенно непонятно, когда создание объекта происходит так:
class GetTypeVar
{
    public static void main(String[] args)
    {
        B obj1 = new A();
        A obj2 = new B();
    }
}
То есть ссылке, ведущей на экземпляр одного класса устанавливается тип класса другого. Зачем? Что это даёт? Вообщем, создание данного топика было навеяно мыслями в поисках истины. Буду рад услышать качественное напутствие...