ActionScript 3
객체 지향 프로그래밍
수색…
정적 메서드를 통해 "오버로드 된"생성자
As3에서는 생성자 오버로드를 사용할 수 없습니다.
클래스의 인스턴스를 검색하는 다른 방법을 제공하기 위해 public static
메서드를 제공하여 대체 "생성자"로 사용할 수 있습니다.
예를 들어, 2D 점 개체를 나타내는 flash.geom.Point
가 있습니다. 점을 정의하는 좌표는 다음과 같을 수 있습니다.
정규 생성자의 데카르트
public function Point(x:Number = 0, y:Number = 0)
예제 사용법 :
var point:Point = new Point(2, -.5);
정적 방법의 극성
public static function polar(len:Number, angle:Number):Point
예제 사용법 :
var point:Point = Point.polar(12, .7 * Math.PI);
실제 생성자가 아니기 때문에
new
키워드가 없습니다.
함수 설정 및 가져 오기
캡슐화를 보장하려면 클래스의 멤버 변수가 private
이어야하며 공용 get
/ set
액세스 메서드를 통해서만 public
액세스 할 수 있어야합니다. 개인 필드 앞에 _
public class Person
{
private var _name:String = "";
public function get name():String{
return _name;
//or return some other value depending on the inner logic of the class
}
public function set name(value:String):void{
//here you may check if the new value is valid
//or maybe dispatch some update events or whatever else
_name = value;
}
때로는 get
/ set
쌍을위한 private
필드를 생성 할 필요조차 없습니다.
예를 들어 맞춤 라디오 그룹과 같은 컨트롤에서 어떤 라디오 버튼이 선택되었는지 알 필요가 있지만 클래스 외부에서는 선택한 값만 get
오거나 set
하는 방법 만 있으면됩니다.
public function get selectedValue():String {
//just the data from the element
return _selected ? _selected.data : null;
}
public function set selectedValue(value:String):void {
//find the element with that data
for (var i:int = 0; i < _elems.length; i++) {
if (_elems[i].data == value) {
_selected = _elems[i];//set it
processRadio();//redraw
return;
}
}
}
패키지
패키지는 클래스 묶음입니다. 모든 클래스는 package
문을 사용하여 package
내에서 선언되어야합니다. package
문 다음에 패키지 이름이오고 최상위 패키지에 클래스를 추가하는 경우에는 아무 것도 표시되지 않습니다. 하위 패키지는 도트 ( .
) 구분을 사용하여 만듭니다. package 문 다음에 단일 class
정의를 포함 하는 블록 이옵니다 . 예 :
package {
// The top level package.
}
package world {
// A package named world.
}
package world.monsters {
// A package named monsters within a package named world.
}
패키지는 소스 루트에 상대적인 클래스의 파일 구조와 관련이 있어야합니다. src
라는 이름의 원본 루트 폴더가 있다고 가정하면 위의 내용을 파일 시스템에 올바르게 표시 할 수 있습니다.
src
TopLevelClass.as
world
ClassInWorldPackage.as
AnotherClassInWorldPackage.as
monsters
Zombie.as
메소드 재정의
클래스를 extend
할 때 override
키워드를 사용하여 상속 된 클래스에서 정의하는 메서드를 override
할 수 override
.
public class Example {
public function test():void {
trace('It works!');
}
}
public class AnotherExample extends Example {
public override function test():void {
trace('It still works!');
}
}
예:
var example:Example = new Example();
var another:AnotherExample = new AnotherExample();
example.test(); // Output: It works!
another.test(); // Output: It still works!
super
키워드를 사용하여 상속 된 클래스에서 원래 메소드를 참조 할 수 있습니다. 예를 들어, AnotherExample.test()
의 본문을 다음과 AnotherExample.test()
변경할 수 있습니다.
public override function test():void {
super.test();
trace('Extra content.');
}
를 야기하는:
another.test(); // Output: It works!
// Extra content.
클래스 생성자를 재정의하는 것은 약간 다릅니다. override
키워드는 생략되고 상속 된 생성자에 액세스하는 것은 단순히 super()
를 사용하여 수행됩니다.
public class AnotherClass extends Example {
public function AnotherClass() {
super(); // Call the constructor in the inherited class.
}
}
get
및 set
메서드를 재정의 할 수도 있습니다.
게터와 세터
getter 및 setter는 속성처럼 작동하는 메서드입니다. 함수 구조를 가졌음을 의미하지만 사용되는 경우 속성과 동일하게 사용됩니다.
getter 함수의 구조 :
그들은이 있어야 get
후 키워드를 function
인수없이, 반환 유형을 지정하고 값을 반환해야합니다, 키워드 및 함수 이름 앞에 :
public function get myValue():Type{
//anything here
return _desiredValue;
}
구문 :
getter에서 값을 얻으려면 구문에서 속성에서 값을 가져 오는 것과 같습니다 (no parens ()
사용).
trace(myValue);
setter 함수의 구조 :
function
키워드 뒤에 function
이름 앞에 키워드를 set
하고 하나의 인수로 값을 반환하지 않아야합니다.
public function set myValue(value:Type):void{
//anything here
_desiredProperty=value;
}
구문 :
setter의 값을 설정하기 위해 구문은 값을 속성으로 설정하는 것과 같습니다 (등호 =
다음 값 사용).
myValue=desiredValue;
한 값에 대한 getter 및 setter 설정 :
참고 : 이름이 getter 또는 setter 만 만드는 경우 해당 속성은 읽기 전용 또는 설정 전용입니다.
속성을 읽기 쉽고 설정 가능하게 만들려면 getter와 setter를 다음과 같이 작성해야합니다.
1. 같은 이름.
2. 같은 유형 (getter에 대한 리턴 값의 유형 및 setter에 대한 입력 값 (인수)의 유형,
참고 : getters와 setter는 다른 속성이나 메서드와 같은 이름을 가져서는 안됩니다.
getter 및 setter의 사용법 :
일반적인 속성보다는 getter와 setter를 사용하면 많은 장점이 있습니다.
1. 읽기 전용 또는 설정 전용 속성 만들기 :
예 : 표시 객체에있는 자식 수입니다. 그것은 설정할 수 없습니다.
2. 사유 재산에 접근하기 :
예 :
private var _private:Type=new Type();
//note that function name "private" is not same as variable name "_private"
public function get private():Type{
return _private;
}
3. 값을 설정 한 후 약간의 변경이 필요할 때 :
이 예제에서이 속성을 변경하려면 알림을 받아야합니다.
public static function set val:(input:Type):void{
_desiredProperty=input;
notifyValueChanged();
}
기타 많은 용도