接口永远不能在 java 中实例化,但是当接口使用 return 类型时发生了什么

Interface can never instantiate in java,But What happened,when Interface is used return type

我们知道,接口永远无法在java中实例化。但是,我们可以通过接口类型来引用实现接口的对象

public interface A
{
}
public class B implements A
{
}

public static void main(String[] args)
{
    A test = new B();  //upcating
    //A test = new A(); // wont compile
}

但是当接口使用return类型的时候我就迷糊了,比如

Method of DriverManager class which return Connection object
public static Connection getConnection(String url);

Connection con=DriverManager.getConnection(String url);

同样的问题

Method of Connection interface which return Statement object
public Statement createStatement();

Statement stat=con.createStatement();

我不明白,当接口使用return类型时发生了什么。 请帮我解释一下。

谢谢

返回的对象是实现所述接口的子类。

测试类

public interface Printable {
    public String print();
}
public class A implements Printable {
    public String print() { return "I am A"; }
}
public class B implements Printable {
    public String print() { return "I am B"; }
}

示例代码

private static final A a = new A();
private static final B b = new B();

public static void main(String[] args) {
    Random random = new Random(0);
    System.out.println(getA().print());
    System.out.println(getB().print());
    for (int i = 0; i < 5; ++i)
        System.out.println(getAorB(random).print());
}

public static Printable getA() {
    return a;
}

public static Printable getB() {
    return b;
}

public static Printable getAorB(Random random) {
    return random.nextBoolean() ? a : b;
}

输出

I am A
I am B
I am A
I am A
I am B
I am A
I am A

当接口用作方法的 return 类型时,实际 returned 是实现该接口的 class 的实例。