Что здесь происходит?
blockquote>Вы неправильно поняли значение
protected
. Вы можете получить доступ к защищенным членам, объявленным вA
, изC
, но только для экземпляровC
или подклассовC
. Подробнее о защищенном доступе см. В разделе 6.6.2 раздела JLS . В частности:Пусть C - класс, в котором объявлен защищенный член. Доступ разрешен только внутри тела подкласса S из C.
Кроме того, если Id обозначает поле экземпляра или метод экземпляра, то:
blockquote>
- [... ]
- Если доступ осуществляется с помощью выражения доступа к полю E.Id, где E является первичным выражением или выражением вызова метода E.Id (...), где E является первичным выражением, то доступ разрешен тогда и только тогда, когда тип E является S или подклассом S.
(Emphasis mine.)
Итак этот код был бы точным:
C c = new C(); System.out.println(c.publicInt); System.out.println(c.protectedInt);
Как получить свойства класса, тип которого используется?
blockquote>Типы существуют только во время компиляции и стираются во время сборки, когда генерируется JavaScript. Таким образом, вы не должны полагаться на интеллектуальную информацию о типах среды выполнения из экземпляров обобщений.
Предложение
Думайте в терминах данных, а не типов. Например. возьмите строки как
string[][]
(2d массив строк / столбцов) и предоставьте самим классам возможность анализировать свои данные в требуемый 2d массив.