Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   вопрос о наследстве, override (http://www.flasher.ru/forum/showthread.php?t=210230)

Фомич 10.02.2015 20:16

вопрос о наследстве, override
 
Приветствую! В документации Adobe написано, что функция override не применяется к базовой функции(методу) родительского класса, одноименной с ним. Если мне нужно переназначить этот базовый метод, а другие функции в классе оставить нетронутыми для потомка, то придется переделывать код родителя? Нет ли какого-то разрешения, вроде virtual, до которого я еще не добрался, но которое может помочь?

GBee 11.02.2015 00:39

Цитата:

базовой функции(методу) родительского класса, одноименной с ним
Это они про конструктор так написали?

Добавлено через 3 минуты
ну если да, то в конструкторе можно вызывать другой метод, который уже точно можно оверрайдить.

Фомич 11.02.2015 00:55

я не дословно процитировал, да, про метод-конструктор имелось ввиду

например такое не работает

Код AS3:

public class A{
public function A(){ // суперкласс
//здесь исходный код
 
}
// еще код
}



Код AS3:

public class B extends A{
override public function A(){
//здесь измененный код
 
}
 
}


Wolsh 11.02.2015 01:08

Так В не наследует никакой public function A, с чего бы к ней применялся override?
Если хотите разный код в конструкторах А и В, то GBee дал правильное решение.

Фомич 11.02.2015 05:03

GBee, спасибо!

Korchy 11.02.2015 13:42

Зачем делать отдельный метод? Конструктор при наследовании оверрайдится в любом случае.
Код AS3:

public class A {
public function A() {
trace("A");
}
}
 
public class B extends A {
public function B() {
trace("B");
}
}
 
public class С extends A {
public function С() {
super(); // Вызвать конструктор предка (А)
trace("С");
}
}
 
var Obj:A = new A()// выведет A
var Obj:B = new B()// выведет B
var Obj:C = new C()// выведет А и С


GBee 11.02.2015 13:45

Цитата:

var Obj:B = new B(); // выведет B
Уверены?

Korchy 11.02.2015 14:30

Цитата:

Сообщение от GBee (Сообщение 1178921)
Уверены?

Да, проверил и получается - наврал. Просто раньше ни разу не сталкивался с тем, чтобы не выполнять конструктор предка, вот и считал, что все работает так.

GBee 11.02.2015 14:54

Ну вроде можно было так обходить:
Код AS3:

if(0)
  super();

Правда не уверен и некрасиво это.

callme 11.02.2015 15:00

Не знаю про
Код AS3:

if(0) super();

но
Код AS3:

if (false) super();

работает.

А почему некрасиво?


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

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