2016-12-20 1 views
2

최근 서피스 뷰 SurfaceView에 대한 안드로이드 문서를 통해보고 있었고, 난 그 다음해야 할 실제 표면을 얻을 발견추상 메소드가 재정의하지 않고 원하는 유형을 정확히 반환하는 방법은 무엇입니까?

SurfaceView.getHolder().getSurface() 

표면 홀더에 대한 문서는 여기에 있습니다 : 이제 https://developer.android.com/reference/android/view/SurfaceHolder.html

SurfaceHolder는 getHolder()에서 리턴합니다. 그러면 그 홀더에서 getSurface()를 호출하여 표면을 가져올 수 있습니다. 이제 getSurface() 메서드를 확인하면 해당 메서드가 추상 메서드라는 것을 알 수 있습니다. 나는 추상적 인 메소드가 오버라이드 (override)되어야한다는 것을 생각하고 욕망 타입을 리턴 할 수있다.

그러나 여기에서는 SurfaceHolder 인 인터페이스에 대한 참조를 제공하고 메서드를 재정의 할 지점이 없다는 것을 의미하는 추상 메서드 인 getSurface()를 호출합니다. 코드가 얼마나 정확하게 적절한 표면을 확인하고 리턴하는 것은 추상 메소드에서 호출된다.

답변

2

추상적 인 방법에 대한 이해가 정확합니다.

누락 된 점은 콘크리트 구현을 반환한다는 것입니다. 추상베이스의 구상 서브 클래스, 또는 경우에 따라서는, 인터페이스의 구상 구현 함수는 기본 클래스/인터페이스를 반환하는 것으로 선언되지만 파생 클래스는 실제로 반환 될 수 있습니다. 이것은 다형성의 주요 형태 중 하나입니다 :

Base getThing() { ... } 

Base 또는 Base의 서브 클래스/구현을 반환 할 수 있습니다.

추가 읽기 : https://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html 구체적인 구현이 당신에게 반환되는

아마 알고있는 일부 내부 비공개 것은, (나는 안드로이드 API를 자신에 익숙하지 않은 해요),하지만이 문제가되지 않는 것입니다 당신. 당신은 무엇이 당신에게 반환되는지 정확히 알 필요가 없습니다. SurfaceHolder를 구현하는지 알 필요가 있습니다.

+0

오, 이제 알 겠어.하지만 아직도 걱정스러운 건 바로 surfaceHolder가 구현하고있는 추상 기반이 정확히 무엇인가? 일반적으로 안드로이드가 인터페이스를 확장하면 대개 문서에서 알려줍니다. 예를 들어, https://developer.android.com/reference/android/view/View.html. 당신이 볼 수 있듯이 여러 인터페이스를 구현하는 추상입니다. 따라서보기가 인터페이스로 간주되는지 이해할 수 있습니다. – JustCurious

+0

@ JustCurious SurfaceHolder는 기본 인터페이스입니다. 당신에게 반환되는 구체적인 구현은 아마 일부 내부 비공개입니다. 그러나 요점은 그것이 당신에게 중요하지 않다는 것입니다. 당신은 무엇이 당신에게 반환되는지 정확히 알 필요가 없습니다. SurfaceHolder를 구현하는지 알 필요가 있습니다. 그래도 사용자의 자만심을 충족시키기 위해 리플렉션을 사용하여 클래스 이름 및 계층 구조를 인쇄 할 수 있습니다. https://docs.oracle.com/javase/tutorial/reflect/를 참조하십시오. –

0

런타임에 실제로 반환되는 값은 SurfaceHolder을 구현하는 개체입니다. 런타임 라이브러리의 다른 곳을보고 어떤 구체적인 객체 유형이 반환되는지 파악해야합니다.

관련 문제