вторник, 6 апреля 2010 г.

Абстрактные классы - быть или не быть?

В этом посте речь пойдет об использовании абстрактных классов... Но что же это такое "абстрактный класс"???
Все просто, это класс который не содержит конструктора, т.е. экземпляр данного класса никогда не сможет быть создан, а весь его интерфейс может быть только переписан из класса наследника. Давайте рассмотрим конкретный пример:

package
{
//Абстрактный класс
public class AbstractClass
{
function abstractMethod( ):void {}
function concreteMethod( ):void
{
trace("ПРИВЕТ! Я метод из абстрактного класса)")
}
}
}


Окей, как мы видим, в теле данного класса нет конструктора и как следствие мы не можем создать его экземпляр, но зато у нас есть два метода: 1-абстрактный, т.е. тот метод функционал которого мы переписываем, и 2-конкретный метод который делает какие-то действия...пойдем дальше)..

Подкласс наследует методы и интерфейс от абстрактного класса и следовательно мы можем переписать его методы используя ключевое слово "override".


package
{
//Подкласс абстрактного класса
public class Subclass extends AbstractClass
{
override function abstractMethod( ):void
{
trace("ЭТО переписанный метод абстрактного класса");
}
}
}

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

package
{
//Осуществление подкласса абстрактного класса
import flash.display.Sprite;
public class ImplementSub extends Sprite
{
// как мы видим тип переменной абстрактен, и мы никогда не сможем создать экземпляр данного типа
private var doDemo:AbstractClass;
public function ImplementSub( )
{
// зато мы можем создать экземпляр подкласса и получить доступ ко всем метода родителя
doDemo=new Subclass( );
doDemo.abstractMethod( );
doDemo.concreteMethod( );
}
}
}


Сохраните пример как ImplementSub.as и сделайте его документ классом, после этого запустите компилятов...в строке аутпута будет следующее:

---ЭТО переписанный метод абстрактного класса----
---ПРИВЕТ! Я метод из абстрактного класса)-----


В данном примере основная фишка заключается в том что нам нет необходимости переписывать все методы класса который мы хотели использовать в качестве родителя, мы можем дополнять и переопеделять функции абстрактного класса простым путем...

Комментариев нет:

Отправить комментарий