2014-07-09 4 views
8

스칼라의 익명 클래스에서 다른 클래스를 확장하는 방법이 있습니까? 나는 당신이 할 필요가스칼라 익명 클래스로 extends를 사용하는 방법

abstract class Salutation { 
    def saybye(): String = "Bye" 
} 

class anotherClass() { 
    def dummyFunction() = { 

    val hello = new { 
     def sayhello(): String = "hello" 
    } extends Salutation 

    val hi = hello.sayhello //hi value is "Hello" 
    val bye = hello.saybye //bye value is "bye" 
    } 
} 

답변

7

네를, 그리고 자바에서와 같이 거의 같은 같습니다 Salutation는 추상적 인

abstract class Salutation { 
    def saybye: String = "Bye" 
} 

val hello = new Salutation { 
    def sayhello: String = "hello" 
} 

val hi = hello.sayhello 
val bye = hello.saybye 

경우 동일한 시그니처가있는 sayhello 메서드를 사용하여 클래스 또는 특성을 구현 한 경우 구현을 제공해야합니다. 당신이 사용하는 경우, 그래서 (때문에 구조 유형 스칼라에서 구현되는 방식) 반사를 포함

hello: Salutation{def sayhello: String} 

참고 sayhello 방법으로 호출 그렇지 않으면 당신은 익명의 구조 형식의 인스턴스를 생성 한 것 메소드는 무겁게 새로운 특성이나 클래스를 정의해야합니다.

+0

처음에 그것을 지정하지 않았지만 예 예문은 추상적입니다 ... 인사말에는 sayHello, 하지만 내가 필요로하고 사용하고 싶은 다른 기능이 있습니다. "진짜"수업을 만들지 않고 다른 방법이 있습니까? – frank

+0

예, 위의 코드가 작동하고 두 메서드를 모두 호출 할 수있는'Saltingation {def sayhello : String}'인스턴스가 생깁니다. –

+0

흠 나는 이것을 다음과 같이 사용해야합니다 : "val hello : Salutation {def sayhello : String}"그렇다면 sayhello의 정의와 인스턴스화 방법을 정의하는 방법은 무엇입니까? – frank

1

같은 의미

val hello = new Salutation { 
    def sayhello(): String = "hello" 
} 
+0

당신은 잠시 나마 이길 수 있습니다. 그러나 이런 종류의 컨텍스트없는 코드 전용 대답은 일반적으로 Stack Overflow에서 좋은 점이라고 생각하지 않습니다. 특히이 경우에는 잠재적으로 혼란스러운 뉘앙스가 많이 있습니다. . –

+0

죄송합니다, 제 질문이 완전하지 않았습니다 ... 제가 바꿨습니다, 지금 분명해야합니다 :) – frank

관련 문제