2017-01-29 6 views
0

Я хочу, чтобы добавить функциональность HttpsURLConnection поэтому я попытался продлить этот класс следующим образом:Расширение HttpsURLConnection

public abstract class HTTPClient extends HttpsURLConnection 

Когда я пытаюсь использовать этот класс:

HTTPClient con = (HTTPClient) url.openConnection(); 

я получаю следующее ошибка:

Exception in thread "main" java.lang.ClassCastException: sun.net.www.protocol.https.HttpsURLConnectionImpl cannot be cast to HTTPClient 

В чем проблема и как ее можно исправить?

Спасибо.

+0

Могли бы вы вставить ту часть, где вы определяете '' url'' переменную? – Matt

+2

Почему вы считаете, что 'url.openConnection()' ничего не знает о вашем подклассе 'HttpsURLConnection'? Он возвращает реализацию 'URLConnection', которая находится в другой ветке иерархии наследования и никоим образом не связана с вашим подклассом. Для этого для работы 'URL' необходимо настроить на фабрике для создания соединений, и это не является частью API. –

+0

HttpURLConnection относится к той же иерархии, что и URLConnection - подразумевает, что пользователь должен был знать, что система будет бросать реализацию, это абсурдно – gpasch

ответ

0

Вы можете расширить следующим образом:

class H extends HttpURLConnection { 
    URLConnection uc; 
    public H(URL url) { 
    super(url); 
    try { uc=url.openConnection(); } catch(Exception ex) { ex.printStackTrace(); } 
} 

public boolean usingProxy() { return true; } 

public void disconnect() { } 

public void connect() { } 

}