2015-08-11 3 views
-1

Я не могу получить доступ к защищенному методу в подклассе (в том же пакете).Невозможно получить доступ к защищенному методу в подклассе

Я использую spring-jms API, DefaultMessageListenerContainer класс.

В моем коде, у меня есть экземпляр класса DefaultMessageListenerContainer, и я пытаюсь вызвать метод getBeanName() на этом объекте, но и в затмении он говорит,

«Метод getBeanName() от типа AbstractJmsListeningContainer не отображается »

В соответствии с javadoc этот метод getBeanName() является защищенным методом, определенным в суперклассе, 'AbstractJmsListeningContainer'.

В моем понимании мы должны иметь доступ к защищенному методу внутри подкласса. Я что-то не хватает?

Прикрепление фрагмента кода Java.

enter image description here

+1

Не размещайте фотографии. Покажите нам, где вы пытаетесь использовать код, который вы указали. –

+0

Редактировать свой вопрос. –

+0

Я не совсем понимаю вашу ситуацию; Я не могу открыть свою фотографию в своем браузере. Не могли бы вы ответить на эти вопросы: 1. Является ли DefaultMessagListenerContainer используемым вами API или его подклассом? 2. Вы подклассифицируете DefaultMessageListenerContainer? Если это так, вы не можете получить доступ к защищенному члену, потому что вы можете получить доступ только к защищенным членам, если они являются вашим классом прямым подклассом суперкласса – univise

ответ

2

фрагмент кода вы вывесили не имеет доступа getBeanName() внутри подкласса. Он пытается получить к нему доступ из клиентского кода. Вы должны были бы определить свой собственный подкласс подвергать открытый метод, чтобы получить к нему:

class MyDefaultMessageListenerContainer extends DefaultMessageListenerContainer { 
    public getMyBeanName() { return getBeanName(); } 
} 

MyDefaultMessageListenerContainer container = new MyDefaultMessageListenerContainer(); 
String name = container.getMyBeanName(); 

Обратите внимание, что вы не можете просто переопределить getBeanName(), поскольку он объявлен final.

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