Концепция наследования java..help - PullRequest
1 голос
/ 24 декабря 2010

Буду очень признателен, если кто-нибудь поможет мне понять концепцию наследования в Java.Следующий код является примером этого?

Я имею в виду, что класс WavPanel на самом деле является подклассом JPanel, который действует как суперкласс.это означает, что «то, что есть у JPanel, также WavPanel, но оно более конкретное, поскольку с помощью его методов вы можете делать что-то еще».Макс

import javax.swing.JPanel;
class WavPanel extends JPanel {

        List<Byte> audioBytes;
        List<Line2D.Double> lines;

        public WavPanel() {
            super();
            setBackground(Color.black);
            resetWaveform();
        }

        public void resetWaveform() {
            audioBytes = new ArrayList<Byte>();
            lines = new ArrayList<Line2D.Double>();
            repaint();
        }
}

Ответы [ 5 ]

2 голосов
/ 24 декабря 2010

Вы правы.WavPanel - это JPanel.Но обычный JPanel не будет содержать никаких компонентов.Вот почему вы расширяете его, так что вы можете добавить некоторое поведение, специфичное для WavPanel

0 голосов
/ 24 декабря 2010

Концепция наследования часто используется как способ добавления новых атрибутов или операций к существующему классу, но наиболее важной особенностью является действительно полиморфизм, как объяснил Андреас. Многие шаблон проектирования GOF (например, T * emplate Method *, State , Strategy ...) основаны на полиморфизме.

Для возобновления наследования не только для структурного расширения, но и для реализации динамического поведения. Например, посмотрите шаблон проектирования Strategy по ссылке, которую я предоставил выше. Несмотря на то, что образцы в C #, самое главное, чтобы понять философию. Если вы хотите узнать больше об объектно-ориентированных принципах, вам следует ознакомиться с Общими принципами (или шаблонами) общего назначения ответственности , сокращенно GRASP .

0 голосов
/ 24 декабря 2010

Это также означает, что вы можете назначить

JPanel mypanel = new WavPanel();

с тех пор, как вы расширили JPanel пользовательскими / дополнительными функциями и почему? Потому что WavPanel - это JPanel. Однако вы не можете вызывать методы, которые реализованы в классе WavPanel.

Эта концепция называется полиморфизмом.

Если у вас есть 3 разных класса, которые все наследуют методы / атрибуты от суперкласса с именем Animal, который предоставляет общие методы, скажем, «Run», «Walk», «Eat» и т. Д., Вы можете обрабатывать разные типы объектов в цикле for. потому что животные, которые расширяют этот класс «животных», являются животными.

Dog myDog = new Dog();
Horse myHorse = new Horse();
Cat myCat = new Cat();


ArrayList<Animal> myAnimals = new ArrayList<Animal>();

myAnimals.add(myDog);
myAnimals.add(myHorse);
myAnimals.add(myCat);

for (Animal animal : myAnimals) {
    animal.run();
} 

В этом примере предполагается, что вы создали класс Animal.

0 голосов
/ 24 декабря 2010

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

Хотя вы, похоже, просто чувствуете, что не понимаете этого на случайном уровне.Есть множество онлайн-ресурсов, которые учат на примерах, например, здесь:

Какой хороший пример наследования классов?

0 голосов
/ 24 декабря 2010

Да, когда вы расширяете, это означает, что вы берете этот класс и можете добавить к нему больше атрибутов.Также суперклассом для всех объектов является Object.

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