расширение класса и сопоставимых в общей структуре данных Java - PullRequest
0 голосов
/ 02 июня 2011

Для домашней работы мне было поручено создать структуру данных AVL Tree.Я пытаюсь сделать мой метод "добавить", чтобы добавить часть общих данных в дерево.Моя проблема в том, что в назначении мы должны расширить класс, который был нам дан, с именем «BinaryTree».В моем методе add мне нужно использовать метод CompareTo, который, как я считаю, означает, что я также должен расширять Comparable.Я посмотрел в Интернете, и, очевидно, вы не можете продлить два класса, так что это становится проблемой.Я решил попробовать написать свой собственный метод CompareTo в своем классе дерева AVL, но он говорит, что <и> не могут быть применены к моему универсальному типу.Есть подсказки или быстрые обходные пути?или я просто тупой?

Спасибо - Стив

Ответы [ 4 ]

3 голосов
/ 02 июня 2011

Java не поддерживает множественное наследование.Однако вам не нужно расширять Comparable, вам нужно внедрять Comparable. Comparable - это интерфейс.Вы не расширяете интерфейс, вы реализуете его.

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

Пример ниже: -

public final class AVL implements Comparable<SomeObject> extends BinaryTree

2 голосов
/ 02 июня 2011

Вы можете использовать Generics для указания типа и требовать, чтобы он реализовывал Comparable.Таким образом, у вас есть доступ к type и compareTo () в дереве AVL.

public class AVL<T extends Comparable<T>> extends BinaryTree {

    public void add(T object) {
            ...
        object.compareTo(some other object)
            ...
    }
}

Тогда вы создадите его как AVL<MyObject> avl = new AVL<MyObject>()

0 голосов
/ 02 июня 2011

Обычно вы хотите сравнить ключи в вашем дереве друг с другом, а не с одним деревом с другим, или с ключом.

Таким образом, ваши ключевые объекты должны реализовать Comparable или лучше Comparable<K>, где K - это некоторый супертип ваших ключей.

Обычно это означает, что вы объявите свой класс AVLTree универсальным:

class AVLTree<K extends Comparable<? super K>, V> extends BinaryTree {

   ...

}

Я не сделалдействительно понимаю отношение к вашему классу BinaryTree, извините.

0 голосов
/ 02 июня 2011

Прежде всего, java.lang.Comparable - это интерфейс, а не класс.Java позволяет вам расширять только один класс, но вы можете реализовать столько интерфейсов, сколько захотите, поэтому вполне допустимо сделать что-то вроде этого:нужно увидеть ваш код и точную ошибку, которую компилятор дал вам.

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