использование наследования с графическим интерфейсом пользователя (Java) в Java - PullRequest
1 голос
/ 25 марта 2010

Я работаю над наследованием с графическим интерфейсом пользователя (GUI)

позвольте мне объяснить, например, я создал суперкласс, который является транспортным средством, а подкласс - автомобилем, поэтому код для наследования будет

автомобиль общественного класса расширяет автомобиль

тогда я хочу построить класс Car как JFrame, как

открытый класс Car расширяет JFrame реализует ActionListener {

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

Кто-нибудь, помогите мне. заранее спасибо

Хотелось бы, чтобы вопрос был понятен

Ответы [ 3 ]

1 голос
/ 25 марта 2010

рассмотрим пример:

class A extends B

Перед наследованием подумайте дважды, если A IS A KIND OF B, а теперь скажите, если CAR IS A TYPE OF FRAME ?? НЕТ ?? Тогда не наследуй.

создайте JFrame и добавьте в него автомобиль ...


Лучшее решение: Разделите автомобиль на классы Модель-Вид-Контроллер .. и добавьте Вид автомобиля на экран (class Sceen extends JFrame)

Теперь MVC вашего автомобиля будет наследовать MVC автомобиля соответственно. Теперь это имеет смысл: CAR IS A VEHICLE.

Еще лучше: вместо добавления вида автомобиля на экран (AGGREGATION), в Screen есть функция, которая получает объект вида автомобиля и рисует его в Screen (то есть DEPENDENCY). Таким образом достигается низкое сцепление.!

1 голос
/ 25 марта 2010

Java не позволяет использовать несколько суперклассов (и на то есть веские причины).

Однако ничто не мешает вам позволить Vehichle расширить JComponent (*), и удлинитель автомобиля.

public class Car extends Vehicle {
...
}

*) JComponent, вероятно, является лучшим выбором для базового класса, поскольку JFrame - это довольно специальный графический элемент. Вместо этого в JFrame можно добавить JComponent.

Кроме того, эта конструкция предполагает, что основной целью транспортного средства (и т. Д.) Является графическое изображение транспортного средства. В противном случае, вы можете рассмотреть возможность разделения поведения в VehicleViewer и Vehicle, например, если Vehicle фактически представляет собой реальное транспортное средство, вы загружаете / храните автомобили из базы данных и т. Д.

0 голосов
/ 25 марта 2010

Переименуйте класс Car в CarView или укажите другой класс Car, используя его полное имя, например, myapp.domain.Car, а не просто автомобиль.

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