![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
FrenchCheese |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 8.9.2010 Репутация: нет Всего: нет |
есть класс вектор и класс отрезок, задающийся точками (а точки задаются как радиус-вектор) и к этому коду надо добавить абстрактный интерфейс абстрактного вектора(как двумерного так и трехмерного), который реализует методы double scalar(AbstractVector v); double len(); Vector multiply(double factor); Vector add(AbstractVector v); Vector sub(AbstractVector v); но всё это дело у меня вообще в голове не укладывается! как это реализовать? |
|||
|
||||
nc30 |
|
||||||
![]() Интересующийся :) ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 24.6.2010 Где: Санкт-Петербург Репутация: 5 Всего: 8 |
Гремучая смесь понятий ![]() Интерфейс, он и так абстрактен, т. к. не может реализовывать методы. Интерфейс здесь будет, IMHO, "ни к селу, ни к городу", т. к. если вы создадите интерфейс Vector, то вы сможете его "прицепить" к любой сущности и она станет вектором. Допустим, есть у вас класс HeavyTruck. Вы сможете объявить его так
Существует понятие абстрактного класса. В нем часть методов можно объявить абстрактными, а часть - реализовать. Экземпляр наследника абстрактного класса должен либо все родительские абстрактные методы реализовать, либо также быть объявлен абстрактным. Абстрактный класс может быть чисто абстрактным, когда все его методы объявлены абстрактными. Может быть объявлен абстрактным класс не содержащий ни одного абстрактного метода. В любом случае, создать экземпляр абстрактного класса нельзя. Абстрактный класс имеет смысл использовать, например, в случае, если предполагается наличие подклассов с рядом полностью совпадающих полей и методов, а также методов с одинаковой сигнатурой (название метода, типы и порядок следования параметров), но с разной реализацией. Либо у набора сущностей есть полностью одинаковые поля и методы и есть уникальные. Общие поля/методы можно вынести в суперкласс и объявить его абстрактным, если не предполагается создание объектов этого суперкласса. Проще говоря: есть общая болванка из которой можно сделать разные детали. Детали можно использовать как конечный продукт, а болванку - нет. В вашей задаче я пока не вижу необходимости использования абстрактного суперкласса. Основная причина в том, что ваш Vector - это простая, беззатейная сущность, которая содержит три поля координат и определенный набор простейших методов, которые сложно реализовать по-разному в разных подклассах. Повторюсь, если вы объявите Vector абстрактным, то вы не сможете создать объект этого класса, даже если он не будет содержать ни одного абстрактного метода. Проще создать обычный неабстрактный класс Vector, в котором определить полный набор методов и спокойно с ним работать. Но если очень хочется, то вот один из вариантов:
Вся общая функциональность (и поля, естественно) вынесена в абстрактный суперкласс. Можно объявить часть методов абстрактными, но т. к. их реализация тривиальна, то не вижу в этом смысла. Также, повторюсь, как и в использовании здесь абстрактного класса. Пользу использования абстрактных классов/методов лучше рассматривать на более подходящем примере. |
||||||
|
|||||||
FrenchCheese |
|
|||
Новичок Профиль Группа: Участник Сообщений: 32 Регистрация: 8.9.2010 Репутация: нет Всего: нет |
Спасибо огромное, сейчас все по полочкам улеглось
сейчас у меня 2 класса вектор2Д и вектор 3Д наследуются от абстрактного класса а как сделать так чтобы класс Segment работал с классом AbstractVector, тоесть с двумя классами векторов? |
|||
|
||||
nc30 |
|
||||
![]() Интересующийся :) ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 24.6.2010 Где: Санкт-Петербург Репутация: 5 Всего: 8 |
В Java переменная типа суперкласса может ссылаться на любые экземпляры дочерних классов. В вашем случае это можно схематично изобразить так:
Здесь не обойтись без понимания таких замечательных штук, как полиморфизм и динамическое (позднее) связывание. Но об этом (а также о многих других интересных вещах в ООП и их реализации в Java) я предлагаю вам узнать самостоятельно ![]() |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |