2013-05-17 3 views
2

내가 플래시 빌더에서 새 ActionScript 클래스를 시작할 때마다이 선 내가 전에 본 적이없는Flash Builder에서 super()입니다. 왜?

super() 

와 생성자를 시작하고, 어떤 목적이없는 것 같다. 그것을 삭제하면 완전히 동일한 영화가됩니다.

왜 내 새로운 수업에 삽입되고 어떤 역할을합니까?

+0

내가 플래시에 대해 아무것도 몰라,하지만 당신은 그것을 : 사람이 더 지식이 답변까지 – gkalpak

+0

를 편집하기 전에 내가 질문을 좋아, 당신은 걸릴 수 있습니다 Java에서 'super()'에 대한 ** ** [here] (http://docs.oracle.com/javase/tutorial/java/IandI/super.html) ** ('Subclass 생성자 '절 참조). 나는 플래시에서'super()'가 그다지 다르지 않을 것이라고 확신한다. (참고 : Java와 Flash는 공통점이 없습니다 (어쨌든 알지 못합니다). 단지이 '저녁밥 (supper)'을 말하는 것입니다. – gkalpak

+0

ActionScript의'super()'는 자바로되어있다. 또한 Java와 ActionScript 3는 공통점이 있습니다. 미국 영어와 영국 영어와 같은 방식으로 비교하고 대조 할 수 있습니다. – TheDarkIn1978

답변

2

inheritance의 일부로 super은 메소드 또는 생성자의 수퍼 클래스 또는 상위 버전을 호출합니다.

메소드 또는 생성자의 상위 클래스 또는 상위 버전을 호출합니다. 클래스 생성자 본문 내에서 사용되는 경우 super() 문은 생성자의 수퍼 클래스 버전을 호출합니다. 수퍼 클래스 생성자에 대한 호출은 올바른 수의 인수를 가져야합니다. 수퍼 클래스 생성자는 명시 적으로 호출하는지 여부에 관계없이 항상 이라고합니다. 을 명시 적으로 호출하지 않으면 인수가없는 호출이 하위 클래스 생성자 본문의 첫 번째 명령문 앞에 자동으로 삽입됩니다. 즉 하위 클래스에서 생성자 함수를 정의하고 수퍼 클래스 생성자가 하나 이상의 인수를 사용하는 경우 올바른 인수 수를 사용하여 수퍼 클래스 생성자를 명시 적으로 호출해야합니다. 그렇지 않으면 오류가 발생합니다. 그러나 수퍼 클래스 생성자에 대한 호출은 이 ActionScript 2.0에서 필요했던 것처럼 하위 클래스 생성자의 첫 번째 문인 일 필요는 없습니다.

인스턴스 메소드의 본문에서 사용될 때, 슈퍼 방법의 수퍼 클래스 버전을 호출 도트 (.) 연산자와 사용될 수 있으며 임의로 수퍼 인수 (ARG1 ...에서 argN)를 통과 할 방법. 이는 수퍼 클래스 메소드에 추가 동작을 추가 할뿐만 아니라 원래 동작을 수행하는 수퍼 클래스 메소드를 호출하는 서브 클래스 메소드를 작성할 때 유용합니다.

정적 메서드에서 super 문을 사용할 수 없습니다.

ActionScript에서 클래스는 final으로 표시되지 않은 다른 기본 클래스를 확장 할 수 있습니다. 다음과 같이

예를 들어, MovieClip 상속은 다음과 같습니다

스프라이트> DisplayObjectContainer와> InteractiveObject에>의 DisplayObject>하는 EventDispatcher> 부모 생성자가 호출 될 때 super()를 호출하여 객체

, 당신은 제어 할 수 있습니다.

package 
{ 
    import flash.display.MovieClip; 

    public class ExampleMovieClip extends MovieClip 
    { 
     public function ExampleMovieClip() 
     { 
      super(); // MovieClip's constructor is called 
     } 
    } 
} 
5

super()는 (확장) 상속하고있는 클래스의 생성자를 호출합니다.

상속 된 (기본) 클래스에 생성자에 필수 매개 변수가없는 경우 모두 함께 생략하면 플래시가 생성자 코드보다 먼저 자동으로 호출합니다.

당신은 슈퍼 키워드를 사용하여 기본 클래스에서 (일반 또는 보호됩니다) 다른 함수를 호출 할 수 있습니다 :

super.myBaseClassMethod(); //would call the method 'myBaseClassMethod' from your base class even if you had an overriden method with in this class 

예 :

package { 
    public class BaseClass { 
     public function BaseClass(){ 
      trace("Base Class Constructed"); 
     } 

     public function someBaseMethod():void { 
      trace("some method called from base"); 
     } 
    } 

} 

package { 
    public class MyClass extends BaseClass { //this class is extending the class above 
     public function MyClass():void { 
      trace("My Class constructed"); 

      super(); 
      someBaseMethod(); 
      super.someBaseMethod(); 
     } 

     override public function someBaseMethod():void { 
      trace("Override"); 
     } 
    } 
} 

그래서 당신은이 작업을 수행 할 경우 :

var tmp:MyClass = new MyClass(); 

당신은 얻을 것이다 :

"My Class constructed" 
"Base Class Constructed" 

"override" 
"some method called from base" 

당신이 super()를 생략하는 경우가있을 것입니다 :

"Base Class Constructed" 
"My Class constructed" 

"override" 
"some method called from base" 
관련 문제