接口永远不能在 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 的实例。
我们知道,接口永远无法在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 的实例。