Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Почему я не могу обращаться у свойствам расширенного класса? (http://www.flasher.ru/forum/showthread.php?t=145046)

FlashWizard 28.09.2010 14:53

Почему я не могу обращаться у свойствам расширенного класса?
 
У меня есть класс Unit, и есть класс Tank. В классе Unit описаны свойства и методы характерные для всех юнитов, а в классе Tank описаны только характерные для танков. Я делаю вот так:
Код AS3:

package {
    public class Unit {
    private var health:int;   
 
    public function Unit(_health:int) {
        this.health = _health;
    }
    }
 
}
 
package {
    public class Tank extends Unit {
    private var gun_size:int;
 
    public function Tank(_gun_size:int) {
        this.gun_size = _gun_size;
    }
    }
}
 
Потом в классе документа хочу создать экземпляр класса Tank.
var t1 = new Tank(23);

Получаю ошибку. Я что не так сделал с конструкторами, но не знаю что именно. Не подскажите? Я хочу чтобы когда танк создавался его свойству gun_size присваивалось 23, но при этом он же Юнит и здоровье тоже присваивалось, но этого не происходит из за ошибки. Как правильно?

alatar 28.09.2010 15:00

Код AS3:

public function Tank(_gun_size:int) {
        this.gun_size = _gun_size;
        super(50);
    }


FlashWizard 28.09.2010 15:04

А как к свойству надкласса обратиться? Внутри подкласса?

alatar 28.09.2010 15:05

К приватному? Никак. Пропишите его как protected и обращайтесь или напрямую или с помощью super.myMethod.

FlashWizard 28.09.2010 15:08

Если вот так:
Код AS3:

super.health = 100;

То flash ругается:
1178: Attempted access of inaccessible property health through a reference with static type Unit.

Добавлено через 1 минуту
А чем отличается protected от private?

Добавлено через 4 минуты
А я что не могу использовать свойства надкласса в экземпляре подкласса?
То есть если я в классе документа напишу вот так:
Код AS3:

var t1 = new Tank(23);
t1.health = 24;

Это будет не правильно?

alatar 28.09.2010 15:14

В хелпе все расписано.

Добавлено через 2 минуты
Вам бы основы сначала почитать.

Добавлено через 4 минуты
Цитата:

Это будет не правильно?
За одно и про public почитайте. А также про геттеры и сеттеры.

FlashWizard 28.09.2010 15:19

Мука читал Essential AS3. Только на практике пока туговато.

Добавлено через 39 секунд
Код AS3:

var t1 = new Tank(23);
t1.health = 24;

Не подскажите что здесь не так?

alatar 28.09.2010 15:20

Перечитайте :) там должно быть все расписано и с примерами.

Добавлено через 2 минуты
Не подскажите что здесь не так?
Код AS3:

package {
    public class Unit {
    public var health:int;   
 
    public function Unit(health:int = 100) {
        this.health = health;
    }
    }
 
}
 
package {
    public class Tank extends Unit {
    private var gun_size:int;
 
    public function Tank(_gun_size:int) {
        this.gun_size = _gun_size;
    }
    }
}

так сработает.

FlashWizard 28.09.2010 15:53

А что изменилось в коде?

Добавлено через 3 минуты
Ааа свойство health стало доступно из любого места программы... Точно я совсем забыл про это, теорию Мука я читал всю и у меня даже получалось, но выветривается всё без практики...

Добавлено через 26 минут
Спасибо, большое.


Часовой пояс GMT +4, время: 06:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.