Я изучаю AS3 и немного смущен относительно того, что делает статическая переменная или метод, или как он отличается от метода или переменной без этого ключевого слова. Я думаю, это должно быть достаточно простым, чтобы ответить.
ActionScript 3: Может ли кто-нибудь объяснить мне концепцию статических переменных и методов?
Ответ 1
static указывает, что переменная, константа или метод принадлежит классу вместо экземпляров класса. static переменная, функция или константа могут быть доступны без создания экземпляра класса i.e SomeClass.staticVar. Они не наследуются каким-либо подклассом, и только классы (без интерфейсов) могут иметь статические элементы.
Функция A static не может получить доступ к нестационарным членам (переменным, константам или функциям) класса, и вы не можете использовать this или super внутри статической функции. Вот простой пример.
public class SomeClass
{
private var s:String;
public static constant i:Number;
public static var j:Number = 10;
public static function getJ():Number
{
return SomeClass.j;
}
public static function getSomeString():String
{
return "someString";
}
}
В TestStatic могут быть доступны статические переменные и функции без создания экземпляра SomeClass.
public class TestStaic
{
public function TestStaic():void
{
trace(SomeClass.j); // prints 10
trace(SomeClass.getSomeString()); //prints "someString"
SomeClass.j++;
trace(SomeClass.j); //prints 11
}
}
Ответ 2
Статическая переменная или метод совместно используются всеми экземплярами класса. Это довольно приличное определение, но на самом деле не может сделать это так же ясно, как пример...
Итак, в классе Foo возможно, вы захотите иметь статическую переменную fooCounter, чтобы отслеживать, сколько Foo было создано. (Мы просто будем игнорировать безопасность потоков на данный момент).
public class Foo {
private static var fooCounter:int = 0;
public function Foo() {
super();
fooCounter++;
}
public static function howManyFoos():int {
return fooCounter;
}
}
Итак, каждый раз, когда вы делаете new Foo() в приведенном выше примере, счетчик увеличивается. Поэтому в любое время, если мы хотим знать, сколько Foo существует, мы не запрашиваем экземпляр для значения счетчика, мы спрашиваем класс Foo, поскольку эта информация является "статической" и применяется ко всему Foo класс.
var one:Foo = new Foo();
var two:Foo = new Foo();
trace("we have this many Foos: " + Foo.howManyFoos()); // should return 2
Ответ 3
Другое дело, что статические функции могут обращаться только к статическим переменным и не могут быть переопределены, см. " hidden".