2015-01-20 2 views
1

Мы знаем, интерфейс никогда не может быть создан в java. Мы можем, однако, относятся к объекту, который реализует интерфейс по типу интерфейсаИнтерфейс никогда не может быть создан в 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 
} 

Но я запутаться, когда интерфейс используется тип возвращаемого значения, такие как

Метод класса DriverManager которые возвращают объект подключения
public static Connection getConnection (String url);

Connection con=DriverManager.getConnection(String url); 

Такая же проблема

Метод интерфейса подключения, который геЬигп объект
публичное заявление createStatement();

Statement stat=con.createStatement(); 

Я не могу понять, что произошло, когда интерфейс используется тип возврата. Пожалуйста, помогите мне объяснить.

Благодаря

+2

Что вы смущены? –

+0

То же, что и в случае с «повышением». –

+0

Вы, кажется, понимаете, что можете повысить, так что у вас есть проблемы в примере 'public A getA() {return new B(); } ' – clcto

ответ

2

Когда интерфейс используется как возвращаемый тип метода, то, что фактически возвращается, является экземпляром класса, реализующего этот интерфейс.

+0

спасибо большое. Отличная концепция answer.my понятна –

0

Возвращаемый объект, чем подкласс, который реализует указанный интерфейс.

Тестовые классы

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 
Смежные вопросы