2009-03-04 4 views
0

왜 인터페이스에서 정적 유형의 메소드를 지정할 수 없습니까?객체 지향 분석 및 디자인

이 작업을 수행 할 수있는 대안이 있습니까?

하지만 추상 클래스의 인스턴스 만 사용해야합니다.

/

인터페이스에서 acess 지정자를 지정하는 데 문제가 있습니까?

인터페이스에서 이벤트를 지정하고 구현 된 클래스에서만 acessed해야하므로 해당 이벤트에 대한 보호 된 acess 지정자가 필요합니다.

그리고 나는 public acess 지정자를 사용할 수있는 다른 클래스의 인터페이스를 사용할 수있는 특정 기능을 가지고 있습니다.

+0

참조 http://stackoverflow.com/questions/512877/why-cant-i-define-a-static-method-in-a-java-interface – VonC

답변

2

어떤 언어를 사용하고 있는지 알 수는 없지만 C#처럼 응답 할 것입니다.

왜 인터페이스에서 정적 유형의 메소드를 지정할 수 없습니까? 이렇게 할 수있는 대안이 있습니까 ??

정적 메서드를 재정의 할 수 없기 때문입니다. 달성하려는 목표는 무엇입니까?

인터페이스의 멤버는 항상 C#에서 공개됩니다. 다른 보호 수준이 필요한 경우 추상 클래스를 사용하십시오. 인터페이스에서 액세스 할 수없는 경우 보호 이벤트의 목적은 무엇입니까? 인터페이스와 아무런 관련이 없습니다 (인터페이스에는 코드가 없음). 클래스를 구현하는 것만이 이벤트를 발생시킬 수 있다고 말하는 경우, 이벤트를 발생시킬 수있는 유일한 클래스입니다. 이벤트는 이러한 방식으로 구축됩니다. 클래스 자체 만 이벤트를 발생시킬 수 있습니다. 클래스에서 외부로 이벤트를 발생시킬 수 없습니다 (클래스에 메소드를 가지고 이벤트를 발생시키는 경우 제외).

1

인터페이스는 구현 자만 공개합니다. 인터페이스에 대한 유일한 액세스 한정자는 인터페이스 자체의 "내부"이며 이는 동일한 어셈블리의 모든 구성원이나 "InternalsVisibleTo"특성으로 알려진 인터페이스에만 표시됩니다.

구현자가 특정 이벤트를보아야하는 경우 해당 이벤트는 일종의 기본 클래스에 있어야합니다.

정적 메서드는 거의 프로 시저 프로그래밍의 나머지 부분입니다. 그들은 자신의 사용법을 가지고 있지만 (예를 들어 확장 방법 참조) 실제로 OOP와 관련이 없다.

0

첫 번째 질문에서 의미를 잃었지만 인터페이스에서 보호 기능을 사용하는 것에 대한 두 번째 질문은 직선 "아니오"입니다. 인터페이스는 사용자가 해당 객체와 통신 할 수있는 "인터페이스"(즉 공용 메소드)를 지정하기 때문에 인터페이스라고합니다.

0

OPC에 대한 나의 경험은 Actionscript 3과 관련되어 있지만 필자는 그것이 상대적이라고 확신합니다.

정적 메서드는 오버라이드 될 수 없으며 클래스가 상위 클래스를 확장 할 때 사용되지 않습니다.

인터페이스가 PUBLIC 메서드를 설정하는 데 사용되므로 인터페이스에서 액세스 한정자가 사용되지 않습니다.

AS3에서 인터페이스는 단순히 블록이없고 데이터 유형을 포함하는 메소드 서명 일뿐입니다.

getter/setter 메서드 서명을 인터페이스에서도 사용할 수 있다는 점에 유의해야합니다. 이것들은 유용하며 setter 만 사용하는 경우 비공개 캡슐화 된 변수에 대한 읽기 전용 공개 액세스 권한을 만들었습니다.

추상 클래스가 아닌 인터페이스는 코드 구현 방법에 따라 달라집니다. 종종 인터페이스와 추상 클래스는 상속과 다형성 (확장/구현)을 사용하여 다른 결과를 얻기 위해 함께 사용됩니다.