According to https://softwareengineering.stackexchange.com/questions/225674/why-define-a-java-object-using-interface-e-g-map-rather-than-implementation, I know I should declare the most abstract type possible, so for example:

    public interface Fruit{
    }

    public class Orange extends Fruit{
    }

when declaring Orange, I should write "Fruit obj=new Orange();" instead of "Orange obj=new Orange();". However, does the "declare the most abstract type" version has higher coupling actually? Because I think "coupling" of a class is about counting how many other class names appeared in the source file, for example:

   Declare the most abstract type : other class names appeared : Fruit, Orange, String (3 classes):

    public static void main(String[] args){
        Fruit obj=new Orange();
        .
        .
        .
    }

   Declare the exact type : other class names appeared : Orange, String (2 classes):

    public static void main(String[] args){
        Orange obj=new Orange();
        .
        .
        .
    }


As "declare the most abstract type" contains 3 other class names, so I think the "declare the most abstract type" has higher coupling than the one that declare the exact type (only 2 class names). Is it true? If not, what is the misconception here? How can a class contains the name of other class but not depending on that class?

Note: the question is just about coupling, neither encourage nor discouraging "declaring most abstract type". Also another reason that I think "Fruit obj=new Orange();" has more coupling is, when one day Orange doesn't extends from Fruit anymore:

    public class Orange{
    }

"Fruit obj=new Orange();" needs changing to "Orange obj=new Orange();" to recompile, while "Orange obj=new Orange();" doesn't need to.