2016-10-07 2 views
0

Я узнаю о суперклассах и подклассах. Мне нужно создать суперкласс (Campsite), а затем два подкласса (FrontCountry и BackCountry), один из которых имеет два дополнительных подкласса (Serviced and Unserviced). Неплохо, я могу все это сделать. Но я задал этот вопрос в самом конце.Как получить доступ к методам в подклассах из основного метода? (Java)

* В CampTester, написать еще один статический метод Java под названием статистика, который принимает, в качестве параметра, массив объектов кемпинга и определяет и выводит следующее: значения атрибутов для каждого объект
общего количества сайтов передней Страны в Национальном парке Терра-Нова, Ньюфаундленде и Лабрадоре
общее количество обслуживаемых сайтов (с сервисом 30 ампер) в Ньюман-Саунд, Национальный парк Терра-Нова, Ньюфаундленд и Лабрадор
местоположения всех сайтов Back Country в Национальном парке Грос-Морн, Ньюфаундленд и Лабрадор
список, по номеру сайта, всех несертифицированных сайтов в Malady Head, Terra Nova N ational Park, Newfoundland and Labrador

Я пытаюсь использовать расширенный цикл для печати атрибутов для каждого объекта в массиве, который я создал. достаточно просто. . Проблема заключается в том, что я не могу получить доступ к методам, которые могут извлекать информацию из подклассов, что мне нужно подсчитывать и настоящие (методы, такие как getLocation, getAmpService, получить провинцию)

В СУТИ:

ли возможно ли доступ к методам, определенным в подклассе, вне этого подкласса (выше в иерархии)?

+2

Вы можете показать свои классы? Я предполагаю, что вы пытаетесь вызвать нестатические методы из основного, что не будет работать, потому что main является статическим. – Zarwan

+1

Привет, и добро пожаловать в SO. Несколько предложений - прочитайте раздел справки, особенно [mcve].К сожалению, никто, вероятно, не собирается читать ваши длительные задания, поэтому постарайтесь уменьшить проблему до наименьшего возможного примера. – OldProgrammer

+0

Назначение говорит, что метод статистики должен быть статическим. Если его не статично, вы не можете его вызвать из основного. public static void statistics (Campsite [] camps) {...} – jmw5598

ответ

0

Не уверен, что я правильно понял вашу проблему, кажется, что вы не выполняли кастинг при доступе к методам в подклассе.

Предположим, что методы getLocation, getAmpService существуют только в FrontCountry, но не в кемпинге для суперкласса. Прежде чем вы захотите получить доступ к этим методам, вам нужно включить объект в FrontCountry.

if (campsite instanceof FrontCountry) { 
    FrontCountry frontCountry = (FrontCountry)campsite; 
    frontCountry.getLocation(); 
    frontCountry.getAmpService(); 
} 
+0

Большое спасибо! Это было! –

1

Расположение переменной класса должно быть определено внутри класса Campsite и должно быть защищено. Защищенные переменные класса наследуются. Класс campsite также должен иметь общедоступные методы getLocation() и setLocation(). Подгруппы наследуют местоположение, getLocation() и setLocation(). Любой экземпляр кемпинга (включая экземпляры подкласса) будет иметь метод camp.getLocation().

+0

Проблема с этим местоположением является атрибутом для BackCountry, а не кемпинга. –

+0

попробуйте использовать if (camp instanceof BackCountry) {((BackCountry) cammp) .getLocation()} – JLaudio

0

Это будет проще ответить с кодом, который у вас есть до сих пор, но в основном, если ваш класс FrontCountry расширяет ваш класс Campsite, и у вас есть массив кемпингов, вы можете делать такие вещи, чтобы получить доступ к методам FrontCountry:

if (campSiteArray[0] instanceof FrontCountry){ 
    ((FrontCountry)campSiteArray[0]).frontCountryMethod(); 
0

Ответ JLaudio определенно правильный. Я также хотел бы добавить, что суперклассы не могут получить доступ к методам подкласса (как может быть предлагать ваш сокращенный вопрос). Причиной этого является то, что структура класса позволяет подклассам быть более специализированными, чем их родители. Таким образом, метод, определенный в подклассе (FrontCountry или BackCountry), не будет доступен для объекта Campsite для вызова.

+0

да, я согласен с ответом JLaudio –

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