저는 스칼라 특성에 대해 약간 혼란 스럽습니다.스칼라의 특성 목록
의 정확한 의미는 무엇입니까val myList = List[MyTrait]
여기서 MyTrait
은 특성입니다.
myList
에는 MyTrait
이 섞여있는 클래스 (MyClass
)의 모든 인스턴스를 포함 할 수 있습니까? 그렇다면 MyClass
은 MyTrait
이 아니기 때문에 조금 이상하지 않습니까?
도움 주셔서 감사합니다.
저는 스칼라 특성에 대해 약간 혼란 스럽습니다.스칼라의 특성 목록
의 정확한 의미는 무엇입니까val myList = List[MyTrait]
여기서 MyTrait
은 특성입니다.
myList
에는 MyTrait
이 섞여있는 클래스 (MyClass
)의 모든 인스턴스를 포함 할 수 있습니까? 그렇다면 MyClass
은 MyTrait
이 아니기 때문에 조금 이상하지 않습니까?
도움 주셔서 감사합니다.
실제로 목록을 List[MyTrait]
으로 선언하면 MyTrait
에 섞인 모든 개체의 컨테이너가됩니다.
Animal
가
fly()
방법을 정의 클래스와
Fly
형질이다
합니다.
List[Animal with Fly]
은 날아 다닐 수있는 모든 동물의 목록입니다.
이있는 경우
trait MySuperTrait
trait MyTrait extends MySuperTrait
trait MyOtherTrait
abstract class MyAbstractClass
class MyClass extends MyAbstractClass with MyTrait with MyOtherTrait
그런 MyClass
IS A :
MyAbstractClass
MyTrait
MySuperTrait
MyOtherTrait
Any
AnyRef
/java.lang.Object
그래서 당신은 MyClass
의 인스턴스 어디 그 유형 중 하나 (또는 MyClass
자체)가 필요 사용할 수 있습니다.trait A
trait B
class C extends A with B
val aList = List[A]()
// aList: List[A] = List()
val bList = List[B]()
// bList: List[B] = List()
new C :: aList
// res1: List[A] = List([email protected])
new C :: bList
// res2: List[B] = List([email protected])
클래스 C
모두 A
및 B
특성을 상속합니다. 그래서 이상하지 않습니다. 내가 생각
, 당신이 요구하는 실제 질문은 바로 이것이다 :
그렇다면,하지가 조금 이상한
MyClass
이MyTrait
되지 않기 때문에 (또는인가?).
입니다. MyClass
은 MyTrait
에서 상속되므로 MyClass
IS-A MyTrait
입니다.
예, 명확하지 않았습니다. 나는 그 특성이 실제로 계급이라는 것을 나에게 알렸다. 고마워. – stackoverflowed
http://stackoverflow.com/questions/663254/why-doesnt-the-example-compile-aka-how-does-co-contra-and-in-variance-w – Rumoku