Вопрос по java, swing, inheritance – Наследование Java: как добиться чего-то похожего на «множественное наследование», когда это не разрешено в Java?

5

Это вопрос в основном о наследовании Java. Я разрабатываю программу, которая имеет 2 окна, оба из которых будут разработаны в отдельных классах, которые расширят JPanel. Первый класс - «FileSub1». и второй - «FileSub2».

Есть много методов, которые являются общими для этих двух классов, поэтому я хотел бы создать класс с именем & quot; Файлы & quot; и создайте & quot; FileSub1 & quot; и & quot; FileSub2 & quot; его подклассы. Но Java не поддерживает множественное наследование! Что я могу сделать здесь?

ЕстьFiles само продлениеJPanel? K-ballo
Используйте интерфейсы. Kazekage Gaara
@ Люк Тейлор: Спасибо за редактирование этого Люка. Я действительно выучил некоторые грамматические ошибки, которые я сделал :) PeakGen
Я предпочел бы композицию по наследству здесь. Создайте класс, который имеет методы, которые вы хотите, и передайте экземпляры этого класса GUI, где это необходимо. Hovercraft Full Of Eels

Ваш Ответ

3   ответа
12

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

public abstract class AbstractFilePanel extends JPanel
{
    public void commonMethod1() {}
}

public class FileSub1 extends AbstractFilePanel 
{
    public void sub1Method() {}
}

public class FileSub2 extends AbstractFilePanel 
{
    public void sub2Method() {}
}
Да. Базовый класс не будет использоваться .. Я думаю, я понимаю вашу точку зрения. В этом абстрактном классе мы можем использовать методы NON ABSTRACT и FIELDS, поэтому у методов может быть тело, и я могу использовать их без переопределения. Разве это не так? PeakGen
Хммм ... Это тоже приятно. Почему ты сделал класс абстрактным? PeakGen
О да! Я думаю, я в порядке сейчас .. PeakGen
@Sepala: я понимаю, что не следует использовать базовый класс, поэтому я сделал его абстрактным. Если это возможно, используется «автономный» тогда, по-видимому, нет причин для этого.
@Sepala: да, правильно.
3

public class Files extends JPanel{
}

public class FileSub1 extends Files{
}

public class FileSub2 extends Files{
}
16

Предпочитаю композицию наследованию

Включите FileThing в свой подкласс JPanel, вместо того, чтобы сделать его FileThingand JPanel.

Прошу прощения, я не понял. Больше объяснений, пожалуйста? PeakGen
@Sepala: ваши классы GUI должны содержать только код GUI. Посмотрите на шаблон MVC (Google this), если вы не хотите, чтобы ваш код был кошмаром отладки.
Пожалуйста, прочитайте вопрос, на который я ссылаюсь, и его замечательные ответы. Вы должны понимать, что означает фраза «Предпочитать композицию, а не наследование». средства; когда ты сделаешь мой ответ, не требует никакой проработки.
Именно так. Вы не должны напрямую смешивать код GUI с кодом файлового ввода-вывода. 1+
Большое спасибо за это :) PeakGen

Похожие вопросы