Доступ к частным переменным экземпляра родителя от дочернего класса?

Для простоты поместите программу vlc.py в тот же каталог, что и ваша программа.
Тогда это самая простая форма заставить vlc воспроизвести что-то

url = "file:///home/rolf/GWPE.mp4"

import vlc

playing = set([1,2,3,4])
instance=vlc.Instance()
player=instance.media_player_new()
player.set_mrl(url)
player.play()
while True:
    state = player.get_state()
    if state not in playing:
        break

Не уверен, что такое часть pafy, но вышеприведенное будет воспроизводить локальный файл, и я подозреваю, что все, что Pafy передает ему.

25
задан lfaraone 4 May 2009 в 23:40
поделиться

6 ответов

Нет, не соответствует спецификации языка Java , 3-й edition :

6.6.8 Пример: частные поля, методы, член класса или конструктор доступный только в теле класс верхнего уровня (§7.6), который включает декларацию члена или конструктор. Не наследуется подклассы.

Но независимо от этого языкового ограничения вы можете получить доступ к закрытым полям через отражение :

Field privateStringField = 
   MyClass.class.getDeclaredField("privateString");
privateStringField.setAccessible(true);

String fieldValue = (String) privateStringField.get(privateObject);
System.out.println("fieldValue = " + fieldValue);
29
ответ дан 28 November 2019 в 18:27
поделиться

No, for that you should use protected.

21
ответ дан 28 November 2019 в 18:27
поделиться

For questions like this, where is a table found on the website here: http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html

Basically you want public or protected variable to be declared in foo since these are the variables that subclasses inherit from their parent and therefore seen in baz.

6
ответ дан 28 November 2019 в 18:27
поделиться

Child classes can not access private members (which is the whole point of private access control).

1
ответ дан 28 November 2019 в 18:27
поделиться

...if there is no accessor method defined in foo?

You need accessors. Besides, take care of inheritance, Should that var really be in parent? Remember IS-A check..

1
ответ дан 28 November 2019 в 18:27
поделиться

You cannot access private variables in descendent classes. Normally you'd want to use "protected" or "package" (the default) level access for this. However if you want to be really tricky, you can resort to using reflection and AccessibleObject to get at it. I wouldn't recommend doing that for production code unless you are really in a bind; for testing, etc., it's fine.

1
ответ дан 28 November 2019 в 18:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: