#java #inheritance #access-modifiers
Вопрос:
Недавно я практиковал тему наследования на Java. Я наткнулся на это утверждение, что « protected
переменные-члены в суперклассе находятся private
в подклассе».
Мой вопрос в том, что если сам подкласс является родителем другого подкласса, сможет ли этот подкласс получить доступ к переменным-членам базового класса?
public class A
{
protected int a;
public A(int a)
{
this.a = a;
}
}
public class B extends A
{
public B(int a)
{
super(a);
}
}
public class C extends B
{
public C(int a)
{
super(a);
}
@Override
public String toString()
{
return ("" this.a);
}
}
public class Test
{
public static void main(String args[])
{
C c = new C(5);
System.out.println(c);
}
}
Сможет C
ли суб-подкласс of A
получить доступ a
, поскольку , согласно приведенной выше логике , protected
становится private
в B, а private
переменные не могут быть унаследованы?
Тестирование этого печатает 5, как это работает тогда?
Комментарии:
1. Хорошая работа по тестированию и опровержению определенно неправильного утверждения! В точку!
Ответ №1:
Я столкнулся с тем фактом, что «защищенные переменные-члены в суперклассе являются частными в подклассе».
Позвольте мне исправить это для вас:
Я наткнулся на эту ложь, что «защищенные переменные-члены в суперклассе являются частными в подклассе».
Как показывает ваш эксперимент, ваш «факт» был пустым звуком. Не уверен, откуда вы это взяли; термины туманны, и, возможно, в предложении, которое вы прочитали, этим словам приписывались разные значения (частный, защищенный, переменная-член, подкласс, суперкласс), но поскольку эти слова довольно хорошо определены, мне трудно представить, к чему это может привести. Возможно, директива стиля (например, вы ДОЛЖНЫ относиться к защищенным вещам от родителя вашего родителя так, как если бы они были частными, т. Е. Не прикасайтесь к ним).
Если это директива по стилю, то я тоже с ней не согласен. Очевидным аргументом является «они являются деталями реализации вашего родительского класса», и это бросается в глаза практически при каждом разумном использовании наследования, поэтому, если нет другой причины, по которой я отсутствую, это тоже неправильно.