2016-08-19 2 views
3

Мне нужно расширить свой класс до класса библиотеки (org.jsoup.nodes.Node). Суперкласс является абстрактным и содержит абстрактные методы. Моя проблема в том, что некоторые из этих абстрактных методов не имеют модификатора, а это значит, что по умолчанию у меня нет доступа, и я не могу их переопределить. Когда я пытаюсь сделать это у меня есть это сообщение:java - расширить класс до суперкласса библиотеки

Метод не отменяет метод из суперкласса

Как я могу решить эту проблему?

ответ

3

Метод без модификатора доступа является закрытым пакетом. Единственный способ подкласса класса, на который вы ссылаетесь, - объявить свой класс в пакете org.jsoup.nodes, так что он находится в том же пакете.

package org.jsoup.nodes; 

class MyNode extends Node { 
    // ... 
} 

Ничто не мешает вам это делать.

Но, учитывая, что класс объявляет закрытые для пакета члены, он, вероятно, не должен быть подклассом вне библиотеки.

+0

Спасибо за ответ. Эта библиотека, которую я добавил в мой проект, доступен только для чтения, я полагаю, я не могу добавить класс java в пакет, не так ли? – TheDahaka

+0

@ TheDahaka: Я не знаю, что вы подразумеваете под «доступом только для чтения» к библиотеке. Вы можете добавить класс в любой не ограниченный пакет, который вы хотите. Я считаю, что единственным ограниченным пакетом является 'java.lang', но я не могу найти это в JLS. –

+0

@ T.J.Crowder мы не можем загрузить исходную банку (например, 'jsoup-1.9.2-sources.jar') и внести в нее изменения? Это верно? –

-2

Если вам нужно расширить его в декларации, здесь ничего не поделаешь, но измените видимость методов суперкласса или переместите свой собственный класс в пакет суперкласса, потому что по умолчанию все java-методы «защищены», что означает, что только классы из одного и того же пакет может их использовать. Вы также можете попробовать отражение, если исполнение во время исполнения соответствует вашим потребностям.

+1

Это неправильно. По умолчанию все java-методы ** НЕ ** защищены. –

+0

Если модификатор отсутствует, метод скомпилирован как защищенный –

+1

Спецификатор доступа по умолчанию отличается от 'protected'. См. Этот ответ один раз: http://stackoverflow.com/a/31413248/2815219 –

Смежные вопросы