2013-03-24 3 views
0

В Java, как я могу получить доступ к защищенным членам в другом пакете?В java protected membes доступ из пакета diff

package p1 
    class base  
     protected int x 

package p2 
    import p1.* 
    class derived extends base 
     int x 

class subderived extends derived 
    int x 

subderived От магистрального Я хочу получить доступ x из p1.base в качестве защищенной спецификации мы можем использовать только наследование мы не можем использовать ссылку для доступа basex. Для доступа derivedx мы можем использовать super.x, но от subderived, как мы можем получить доступ к base.x?

ответ

2

Защищенные члены доступны из непосредственно полученных и субтропических производных классов без каких-либо классификаторов: вместо того, чтобы писать

base.x = 123; 

вы можете написать

x = 123; 

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

+1

но не является 'производным.x' [скрывается] (http://docs.oracle.com/javase/tutorial/java/IandI/hidevariables.html)' base.x'? – wchargin

+0

@WChargin Вы правы, я пропустил тот факт, что в производном классе 'x' скрывается' x' в базе. Я сомневаюсь, что другие 'x' помещаются туда намеренно, поэтому я обновил ответ, чтобы отразить это. Благодаря! – dasblinkenlight

+0

** Большое спасибо ** –

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

  • Нет связанных вопросов^_^