Какие методы может наследовать подкласс в Java? - PullRequest
6 голосов
/ 14 июня 2011

Извините, я новичок в Java. Я пытаюсь разобраться в отношениях наследования и подкласса / суперкласса в Java.

Если classA является подклассом classB, будет ли протокол classA содержать все методы, принадлежащие classA, или только те, которые объявлены как public и package?

Может ли протокол classA иметь частные методы, унаследованные от его суперкласса ClassB?

Ответы [ 6 ]

11 голосов
/ 14 июня 2011

Во-первых, слово «унаследовано» не совсем правильный термин.Вы имеете в виду «видимый».

  • public и protected всегда видимы
  • private не виден
  • по умолчанию (он же «пакет»)видимость - т.е. не указанная видимость - видна, только если подкласс находится в том же пакете (как это было бы для любого класса в том же пакете)
1 голос
/ 14 июня 2011

Все открытые и защищенные методы и переменные будут наследоваться.Любые методы с одинаковой сигнатурой в подклассе будут переопределять поведение суперкласса.Подкласс не будет наследовать частные методы и переменные.Значение по умолчанию (уровень видимости пакета) будет наследоваться, если оно находится в одном пакете и подклассах.

0 голосов
/ 14 июня 2011

Открытые методы, помеченные public, доступны для каждого класса.Защищенные методы, помеченные protected, доступны для подклассов и дружественных классов, которые являются классами в одном пакете.Дружественные методы, помеченные ничем (то есть по умолчанию), доступны для дружественных классов.Закрытые методы доступны только самому классу.

Статические методы, помеченные static, доступны для объекта без доступа к ним.Они вызываются ClassName.foo (), SuperClassName.foo () (не нужно, если не переопределено, foo () допустимо) или ClassName.foo () (не нужно, foo () приемлемо).), помеченные ничем (то есть по умолчанию), доступны только в том случае, если есть объект класса.Например: bar.foo (), this.foo () (необязательно, foo () допустимо) или super.foo () (не нужно, если не переопределено, foo () допустимо). Переопределенные методы, помеченные @Override, являютсядоступно только через super.foo

Таким образом, в экземпляре ClassB будут доступны все protected и public члены и методы ClassA.В статическом вызове доступны только статические методы.

0 голосов
/ 14 июня 2011

Частные методы не наследуются. Только защищенные, публичные и стандартные методы наследуются.

Класс A предоставит общедоступные методы как для classA, так и для ClassB

0 голосов
/ 14 июня 2011

Закрытые методы ClassB не видны для ClassA. Если вы хотите предоставить ClassA доступ к внутренним методам ClassB (без того, чтобы эти методы стали частью открытого интерфейса ClassB), вы должны сделать их защищенными, а не закрытыми.

0 голосов
/ 14 июня 2011

ClassA унаследует все открытые и защищенные методы classB.Он НЕ будет включать частные методы класса B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...