![]() |
Наследование и статические переменные
Приветствую всех!
Пусть есть класс Car, у которого есть статическая переменная speed, которая используется во множестве функций множества экземпляров этого класса (множества здесь в смысле, что их много). Если мы меняем значение этой статической переменной speed, то, естественно, все экземпляры класса Car в своих функциях используют новое значение этой переменной. Предположим, что я хочу создать класс NewCar, наследующий класс Car. У класса NewCar другое значение статической переменной speed. Как мне не переопределяя все функции (использующие speed) из Car в NewCar добиться, чтобы эти функции использовали значение статической переменной speed из подкласса, а не из класса? |
Зачем ее статической делать?
|
Цитата:
|
В NewCar написать
Код AS1/AS2:
|
У каждого Car может быть своя speed. Но Вам виднее.
|
Цитата:
Попробую еще раз объяснить. Есть суперкласс Car: Код:
class Car {Код:
class NewCar extends Car {Код:
var car:Car = new Car();Цитата:
2dimarik: Цитата:
Постараюсь описать мой случай. Есть две категории юнитов (два класса: один супер, второй наследник; или два наследника от одного супер - не важно) - "свои" и "враги", соответственно есть две группы юнитов по n штук в каждой. Эти две группы юнитов передвигаются по карте, каждой группе присуща своя скорость speed, задаваемая в собственном классе. Ну, а статической она является для того, чтобы изменив ее на уровне класса, вся группа получила новое значение (не во всех классах, а только в этом), иначе пришлось бы в каждом экземпляре менять скорость вручную. |
Код AS1/AS2:
|
Это банальное переопределение ф-ии. Представьте, что таких ф-ий 25...))) Получится, что наследник по объему кода равен суперклассу - пропадают все преимущества наследования.
|
А ты в Car во всех методах измени speed на getSpeed(), и наслаждайся всеми преимуществами наследования в любом количестве классов-наследников.
|
И даже так работает как просили:
Код AS1/AS2:
Код AS1/AS2:
А прочесть по этой ситуации можно у Мука "Основы АС2" стр. 111 |
Цитата:
|
Цитата:
Во меня заклинило...)) Я Мука дочитал пол года назад, наверное, и точно помнил, что он эту ситуацию описывал, а решение вспомнить никак не мог. Точнее даже вспомнил, но видимо в спешке что-то напортачил, результата нужного не получил и отбросил. Ходил мучился, что Мук в 200 километрах от меня и нельзя его почитать..))) 2Жень Шень: Не понял вашу мысль. Стоял читал, пока ждал своей очереди на сдачу экзамена на права. Сдал. Сейчас пришел домой, еще несколько раз прочитал - все равно не понял... :umnik2: :wacko: :D Объясните поподробней вашу мысль, если не сложно, чтобы у меня недопонимания в этом вопросе не оставалось. На счет Мука... Мук форева! :) 2dimarik Цитата:
|
Цитата:
Надо просто добавить в классы геттер. Код AS1/AS2:
Код AS1/AS2:
|
Кстати, сам Мук предпочитает ваш первый вариант, а геттеры и сеттеры почему-то недолюбливает - насколько я понял из его книги по ас2 :)
|
Вложений: 1
Цитата:
Потом дабавьте "trace(Car.speed)" Да, пропустил расширение Car до NewCar: Код AS1/AS2:
|
Я честно не могу понять, что вы хотите мне показать, извините. То, что вы написали раньше, я уже опробовал, посмотрел аттач - там все то же самое...))
Не могу понять, чего я не вижу, а вижу вот что: класс Car определяет статпеременную speed = 10; он же определяет функцию getSpeed(), возвращающую эту переменную класс NewCar определяет свою статпеременную speed=50; он же переопределяет ф-ию getSpeed() => она возвращает уже 50; trace(Car.speed) напрямую обращается к статпеременной из Car (она хоть и прайвэт, но т.к. NewCar - подкласс, то имеет к ней доступ и выдает 10). У вас доступа не было из-за того, что один класс не расширял другого. |
Вложений: 1
Цитата:
Исходя из теперь правильно понятой задачи, могу предложить следующее: Функции использующие speed в классе Car должны знать кто их вызывает (экземпляр какого класса-подкласса). Поэтому введя некий признак (например, myName) можно использовать то или иное значение скорости. Конечно, надо переделать все 25 функций основного класса(!). Последнее слово за вами. |
Выше я указывал на подход к _проектироаванию_. Ну, бл, любой CAr имеет свой спиид. Завтра, Вам, дорогой товарищ, понадобится развести группы по скоростям, отдельно для _каждаго_ "свои", отдельно для _каждаго_ "enemy". Я сплю и вижу тучу танков, но они движутся каждый сам по себе.
А теперь все вместе начинаем думать о "Вы сейчас мыслите категориями физической привязки моделей в каком-то приложении.". Разом! И вообще о "категориях" мышления. Вы Гёте читали? |
Я указал в начале конкретную задачу, вы вклинились со своей репликой про у каждого может быть своя скорость, я вам ответил, что вы мыслите конкретно под физ. модель, ибо я нигде не давал повод думать, что у каждого может быть своя скорость и, чтобы окончательно развеять ваш порыв, привел конкретный свой пример. У вас проблемы с логикой?
|
Вы указали на задачу, не соответствующую нормальной логике. У Вас проблемы с логикой.
|
)) Не пойму, dimarik, а что собственно нелогичного в том что все танки класса Hunter ездят с одной скоростью, а Dictator - с другой?
И почему бы orcpochta самому не задавать правила своей игры? |
| Часовой пояс GMT +4, время: 03:11. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.