2016-02-11 2 views
1

Скажем, у нас есть класс для экзаменов и класс для курсовой работы, и оба из них требуют те же атрибуты, такие как courseword/экзамен ид, имя, срок, вес и т.д.диаграммы классов отношения Интерфейсы

Будет ли это разумно создать интерфейс, чтобы оба реализовали те же методы, что и то, что я сделал ниже? [enter image description here] [ пытаясь найти лучший подход к ОО, просто не уверен, что я немного переусердствую.

Спасибо

ответ

1

Я думаю, что лучший подход состоит в создании класса Class, от кого классных и ClassExam наследует.

Класс отца ClassF объявит эти общие атрибуты, а остальные 2 подкласса должны будут объявить те конкретные атрибуты, которые делают их уникальными, потому что общие из них подразумеваются наследованием.

Попробую объяснить на примере:

 ClassF -> attributes: name, ID, weight, Date 
       -> methods: getName() .... 

      Exam -> attributes: marks 
        -> methods: calculateMarks()... 

      CourseWork -> attributes: typeOfCourse 
         -> methods: printInfoCourse()... 

подклассов экзамен и курсовую работу можно реализовать и использовать, например, идентификатор из ClassF, потому что он унаследовал от своего отца класса.

Может быть, это хорошая идея, чтобы решить, если вы хотите разрешить создание экземпляра ClassF или нет, потому что в этом случае было бы интересно превратить ClassF в абстрактный класс ..


Только для запись в этом конкретном случае использование интерфейса для реализации этих классов является неправильным подходом, потому что это не функция интерфейса (https://docs.oracle.com/javase/tutorial/java/concepts/interface.html для получения дополнительной информации)

Надеюсь, это поможет!

+0

Мне нравится идея этого. Поэтому скажите, что я хотел добавить, например, вес конкретной учебной программы или экзамена. Пример: Курсовая работа 1 = 25%, Курсовая работа 2 = 25% и Экзамен = 50%. Как бы это реализовать? Каким будет подход? Также, что, если я хочу иметь несколько курсов или экзаменов? не нужны ли им свои идентификаторы? –

+1

ClassF есть этот способ, правильно? Таким образом, в подклассах есть тоже, но вы хотите различное поведение для каждого подкласса, и в этом случае вам нужно сделать @overrided из метода ClassF. Это зависит от вас, если вы хотите полностью изменить его или добавить только некоторые функции. Кстати, это полиморфизм! – Jessica

+1

См. Http://stackoverflow.com/questions/3311788/when-to-implement-an-interface-and-when-to-extend-a-superclass –

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