Java апкастинг и даункастинг по интерфейсам

Это, вероятно, глупый вопрос, но мне нужно знать. У меня интерфейс как

import com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync;

public interface AsyncClient extends AmazonDynamoDBAsync{

}

И у меня есть класс ClientCreator, который имеет метод

import com.company.clients.AsyncClient;
public class ClientCreator {
        public static AsyncClient getAsyncClient() throws FileNotFoundException, IllegalArgumentException, IOException{
            AmazonDynamoDBAsync client = new AmazonDynamoDBAsyncClient(getCredentials());
            client.setRegion(getRegion());
            return (AsyncClient)client;
        }
        .
        .
        .

Здесь AmazonDynamoDBAsyncClient реализует AmazonDynamoDBAsync, а AsyncClient расширяет AmazonDynamoDBAsync, но этот код не будет работать и выбрасывает

com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsyncClient не может быть приведен к com.company.clients.AsyncClient

но почему?

1 ответ

Решение

По сути, у вас есть такая иерархия:

         AmazonDynamoDBAsync 
                  ^
                  |
     -----------------------------
     |                           |
AmazonDynamoDBAsyncClient   AsyncClient 

И вы пытаетесь разыграть AmazonDynamoDBAsyncClient экземпляр для AsyncClient, что невозможно. Это братья и сестры. Возьмите это так: "Яблоко" и "Банан" оба являются "Фруктами", но "Яблоко" - это не "Банан".

Другие вопросы по тегам