Форум 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=192889)

pomuс 20.01.2013 20:35

наследование и переопределение методов
 
Добрый вечер
Помогите пожалуйста. Делаю первые шаги в создании своих классов, и сейчас столкнулся с наследованием
Мне надо переопределить некоторые функции родительского класса. Я прочитал много материала про это не , некоторые моменты не пойму
Код AS3:

public class MenuItem extends Sprite {
 
        public function MenuItem(title:String) {
 
public class SubItem extends MenuItem {
 
        public function SubItem(title:String) {

по сути конструктор мне менять не надо,
1)как мне прописать, чтобы дочерний класс применял в свой конструктор, конструктор родителя?
2)И на будущее, если мне надо будет переопределить конструктор родительского, как правильно это сделать?

также при компиляции флеш ругается на переменную в переопределяющем методе.
Код AS3:

public function addTitle():void {
                        _titleText = new Sprite();
//в дочернем класссе
override public function addTitle():void {
                        _titleText = new Sprite();
//Attempted access of inaccessible property container through a reference with static type SubItem.

_titleText обозначена приватной переменной (до конструктора класса). Что тут не так?

dimarik 20.01.2013 20:43

Конструктор надкласса сам вызовется, можно сделать это явно как super() или неявно, опустив эту инструкцию. Компилятор сам сделает в байткоде вызов super(); Переопределить конструктор как он есть невозможно.

А где вы "container" определяли?

pomuс 20.01.2013 20:49

Код AS3:

это в классе родителе до конструктора
private var container:Sprite = new Sprite();
private var _titleText:Sprite;
private var _title:String;

также ругань была на
Attempted access of inaccessible property _titleText through a reference with static type SubItem.
Attempted access of inaccessible property _title through a reference with static type SubItem.

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

alatar 20.01.2013 20:53

Приватные переменные не будут доступны в подклассах. Если хотите что бы переменная была доступна в наследниках, используйте protected вместо private.

pomuс 20.01.2013 21:03

так, переделал. А public наверное и так наследуются да?
еще 1 ошибка, при компиляции
Код AS3:

метод дочернего класса
override public function addItem(item:SubItem):void {
                        item.y = 28 * container.numChildren;

а в stage в самой флешке добавляется
Код AS3:

var item4_1:SubItem = new SubItem("1");
        var item4:MenuItem = new MenuItem("1st")
        stage.addItem(item4);
        item4.addItem(item4_1);
//Incorrect number of arguments.  Expected 0.  // на первую строчку

ругается все таки на другое. В родительском классе есть конструктор
Код AS3:

public function MenuItem(title:String) {
                        buttonMode = true;

вот как раз идет связь с первым вопросом. В дочернем классе я не ставил конструктор именно класса SubItem. получается там срабатывает конструктор от родителя. Но тем не менее выстреливает эта ошибка

alatar 20.01.2013 21:18

http://help.adobe.com/ru_RU/as3/lear...73f7-7fea.html

pomuс 21.01.2013 00:23

спасибо за помощь!
Если кто то столкнется такой же загвоздкой, то вкратце скажу:
у классса ребенка также должен обозначатся конструктор. Если нужно просто скопировать конструктор в родителя, то конструктор ребенка можно оставить пустым.
для переноса нужного параметра в конструктор родителя, надо в конструкторе ребенка указать super(parametr);
а сама форма конструктора должна быть идентична родителськой

alatar 21.01.2013 01:58

1. Не обязательно.
1.1 Конструктор ребенка можно вообще не описывать.
3. Не обязательно.


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

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