![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
Приветствую всех!
Пусть есть класс Car, у которого есть статическая переменная speed, которая используется во множестве функций множества экземпляров этого класса (множества здесь в смысле, что их много). Если мы меняем значение этой статической переменной speed, то, естественно, все экземпляры класса Car в своих функциях используют новое значение этой переменной. Предположим, что я хочу создать класс NewCar, наследующий класс Car. У класса NewCar другое значение статической переменной speed. Как мне не переопределяя все функции (использующие speed) из Car в NewCar добиться, чтобы эти функции использовали значение статической переменной speed из подкласса, а не из класса?
__________________
скриптограф |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Зачем ее статической делать?
|
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
я же объяснил, чтобы изменив ее один раз в классе все экземпляры пользовались новой версией, а так пришлось бы в каждом экземпляре ее менять
__________________
скриптограф |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
Цитата:
Попробую еще раз объяснить. Есть суперкласс Car: class Car {
private static var speed:Number = 10;
public function Car () {
}
public function getSpeed ():Number {
return speed;
}
// + еще 25 функций, использующих speed;
}
class NewCar extends Car {
private static var speed:Number = 50;
public function NewCar () {
super();
}
/* тут надо что-то написать, чтобы не переписывать все
функции из Car, использующие speed, т.к. в таком варианте значение
speed берется из Car, а не из NewCar. Ибо, если переписать все
функции, то теряется сам смысл наследования */
}
var car:Car = new Car(); var newCar:NewCar = new NewCar(); trace(car.getSpeed()); trace(newCar.getSpeed()); Цитата:
2dimarik: Цитата:
Постараюсь описать мой случай. Есть две категории юнитов (два класса: один супер, второй наследник; или два наследника от одного супер - не важно) - "свои" и "враги", соответственно есть две группы юнитов по n штук в каждой. Эти две группы юнитов передвигаются по карте, каждой группе присуща своя скорость speed, задаваемая в собственном классе. Ну, а статической она является для того, чтобы изменив ее на уровне класса, вся группа получила новое значение (не во всех классах, а только в этом), иначе пришлось бы в каждом экземпляре менять скорость вручную.
__________________
скриптограф |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
__________________
Reality.getBounds(this); |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 890
|
Это банальное переопределение ф-ии. Представьте, что таких ф-ий 25...))) Получится, что наследник по объему кода равен суперклассу - пропадают все преимущества наследования.
__________________
скриптограф |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
А ты в Car во всех методах измени speed на getSpeed(), и наслаждайся всеми преимуществами наследования в любом количестве классов-наследников.
__________________
Reality.getBounds(this); |
|
|||||
|
И даже так работает как просили:
/////////// NewCar.as ///////////////////// class NewCar { private static var speed:Number = 50; public function NewCar() { super(); trace(Car.speed) } public function getSpeed():Number { return speed; } // + еще 25 функций, использующих speed; } /////////// Car.as ///////////////////// class Car { private static var speed:Number = 10; public function Car() { } public function getSpeed():Number { return speed; } } /////////// car.fla //////////////////// var car:Car = new Car(); var newCar:NewCar = new NewCar(); trace(car.getSpeed()); trace(newCar.getSpeed()); А прочесть по этой ситуации можно у Мука "Основы АС2" стр. 111 |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:12. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|