Нужно наследовать отношения объяснил - PullRequest
1 голос
/ 10 августа 2011

Я не ищу, чтобы вы дали мне ответ на этот вопрос, я просто прошу объяснений, чтобы дать мне понимание того, как я могу найти ответ.

Предположим, у нас есть проект из четырех классовA, B, C и D. У нас есть следующие переменные:

A a;B b;C c;D d;

Следующие назначения являются законными (все они компилируются):

a = b;а = с;d = b;

Следующие назначения недопустимы (они вызывают ошибки компилятора):

c = d;д = с;d = a;

Нарисуйте отношения наследования между этими классами.

Помощь приветствуется, спасибо:)

Ответы [ 4 ]

4 голосов
/ 10 августа 2011

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

a = b означает, что b находится где-то в иерархии подклассов a или вдругими словами, a является предком b.

Если он не компилируется, это означает, что это недопустимое присваивание.

Из вашего «легального» назначения вы можете сделать вывод, что b является подклассом a, c является подклассом a и b является подклассом d.

Надеюсь, это должно дать вамдостаточно, чтобы продолжить.

1 голос
/ 10 августа 2011

Если класс X наследует от класса Y, можно присвоить объект x переменной типа Y, например:

y = x;

Если 2 класса не наследуют, это невозможнои вы получите ошибку компиляции.

Примечание : Это будет означать, что вы можете получить доступ только к методам Y, даже если он все еще является объектом класса X.

1 голос
/ 10 августа 2011

Вот метод, который вы можете использовать для разработки диаграммы.Нарисуйте каждую возможную линию наследования между набором из четырех классов.Если присвоение является законным, то строки наследования, соответствующие этим отношениям, могут быть помечены как действительные.Если присвоение является недопустимым, то строки наследования, соответствующие этим отношениям, могут быть удалены.Как только вы закончите, остальные строки должны содержать окончательную карту наследования.

0 голосов
/ 10 августа 2011

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

Нарисуйте ориентированный ациклический граф.Если присваивание допустимо, нарисуйте стрелку от типа присваиваемого значения (справа) до типа присваиваемой переменной (слева).Если присвоение недопустимо, в этом направлении нет стрелки . Это создаст нечто, похожее на UML, где стрелка из производного класса указывает на его суперкласс.

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