Переопределение переменной при расширении класса с другим типом в Java - PullRequest
1 голос
/ 13 февраля 2012

Я хочу расширить класс, как показано в примере ниже. При расширении я просто хочу изменить тип одной переменной; объявление того же имени переменной с другим типом будет делать это?

class Graph {
    LinkedList<Node> vertices;
}


class EntityGraph extends Graph {
    LinkedList<Entity> vertices; 
} 

Ответы [ 4 ]

3 голосов
/ 13 февраля 2012

Во-первых, в этом сценарии лучше использовать переменные доступа типа «защищенный», а не по умолчанию (т. Е. Сделать его защищенным в классе Graph и защищенным или менее ограничительным в EntityGraphClass).

Затем выможете набрать ваш класс Graph, например:

class Graph<T> {

protected LinkedList<T> vertices;

}

, затем выполнить

class EntityGraph extends Graph<Entity> {
     //no longer needed
    //LinkedList<Entity> vertices; 
} 

, и вы получите реализацию класса Graph (в классе EntityGraph), которая имеет Listтипов сущностей;

Если сущность расширяет узел, и вы хотите, чтобы элементы в списке были как минимум типа узла, вы можете сделать:

class Graph<T extends Node> {

    protected LinkedList<T> vertices;

}
0 голосов
/ 13 февраля 2012

вы не можете переопределить переменные в Java. У вас может быть переменная с другим именем.

0 голосов
/ 13 февраля 2012

Вы не можете переопределить поля в Java.Когда вы делаете то, что только что показали нам (что хорошо компилируется), вы создаете только другую версию поля vertices в подклассе.

Так что, если вы делаете Graph graph = new EntityGraph();, graph.vertices будет содержать значение единицы в EntityGraph.

0 голосов
/ 13 февраля 2012

Концепция переопределения предназначена только для нестатических функций-членов.Поскольку для Entity Graph требуется другой тип переменной, можно либо объявить переменную-член для Entity Graph, либо использовать методы получения и установки.

Установщик в Entity Graph, который установит переменную в суперклассе путем изменения типа.

Получатель в классе Entity, который получит значение переменной из суперкласса, напечатает его и возвратит значение.

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