2014-01-24 2 views
0

저는 Flex를 처음 사용했습니다. 나는 Flex에서 Interface에 관해 의심의 여지가있다. 우리가 알고 있듯이 AS3도 객체 지향 언어입니다. 질문 :Flex에서 인터페이스를 초기화하는 방법은 무엇입니까?

1.if 클래스 A는 클래스 B를 확장합니다. 그런 다음 클래스 A는 인터페이스 C를 구현할 수 없습니다. 이유는 무엇입니까?

  1. 다른 클래스를 확장하지 않는 클래스가 인터페이스를 구현할 수 있습니다. 그 뒤에있는 이유는 무엇입니까?

  2. Flex 인터페이스의 함수 선언에 액세스 지정자를 지정할 수없는 이유는 무엇입니까? >

    package 
    { 
        public interface InterfaceTesting 
        { 
         function foo():void;   
        } 
    
    } 
    

    클래스 A - 클래스 A가 클래스 B 코드

    인터페이스 부와 C

내 질문의 업데이트 구현 확장처럼

는 왜 우리가 쓸 수 없습니다 - >

package 
{ 
    import mx.controls.Alert; 

    public class A 
    { 
     public function test():void 
     { 
      trace("control is in Top Class") 
      Alert.show("control is in Top Class"); 
     } 

    } 

} 

클래스 B ->

package 
{ 
    import mx.controls.Alert; 
    import mx.messaging.channels.StreamingAMFChannel; 
    import mx.states.OverrideBase; 

    public class B extends A implements InterfaceTesting 
    { 
     override public function test():void 
     { 
      Alert.show("We are in Second Class"); 
     } 

     public function foo():void 
     { 
      Alert.show("This is Interface Implementation"); 
     } 
} 
} 

나는 오버라이드로 표시되지 않은 함수를 재정의 1024입니다 클래스 B의 오류를 받고 있어요.

나를 안내하십시오.

+0

'클래스 A가 클래스 B를 확장하는 것처럼 작성할 수없는 이유는 무엇입니까? '> 가능합니다. – RIAstar

답변

0

나는 당신이 무엇을 요구하고 있는지 확실하지 않지만, 당신이 묘사하고있는 것이 가능해야합니다.

유효한 예 :

ClassA.as

package { 
    public class ClassA extends ClassB implements InterfaceC { 
     public function ClassA() { 

     } 

     public function bar():void { 

     } 
    } 
} 

ClassB.as

package { 
    public class ClassB { 

     public function ClassB() { 

     } 

     public function foo():void { 

     } 
    } 
} 

InterfaceC.as

세 번째 질문에 대해서는 :

편집

package { public interface InterfaceC { function foo():void; // Will be inherited from ClassB function bar():void; // Is defined in ClassA } } 

가 인터페이스를 준수하려면, 인터페이스에 정의 된 방법은 public 또는 internal이 될 필요가있다. 인터페이스는 공개적으로 사용할 수있는 메소드 선언에만 유용하기 때문입니다.

클래스가 InterfaceC (위)을 구현하고 함수 foo()을 포함하지만 비공개로 선언 한 경우 - 외부에서 연결할 수 없으므로 인터페이스를 준수하지 않습니다.

+0

클래스 A에서 재정의를 표시해야하고 인터페이스 C도 구현하려고합니다. 동일하게 작동합니까? 왜냐하면 나는 클래스 A에서 재정의를 사용하고 인터페이스도 구현했기 때문입니다. 오류가 발생했습니다. –

+0

@AnujSharma 무시해야합니다. 예를 들어'public override function foo() : void'를 작성하여'ClassA'에서'foo()'('ClassB'에 정의되어 있습니다)를 override하면 모든 것이 컴파일됩니다. 왜냐하면 클래스가 여전히' foo' 메쏘드를 사용합니다. 문제가있는 클래스의 구조와 오류로 질문을 업데이트하십시오. –

관련 문제