2013-06-05 41 views
5

Tôi muốn kết hợp hai thư viện, một yêu cầu tôi mở rộng một lớp trừu tượng với các phương thức a_1 a_2 ... a_n, b_1, b_2 ... b_m và một phương thức khác cung cấp hai đối tượng A và B tương ứng thực hiện các phương thức a_i và b_i. Có cách nào tao nhã để kết hợp A và B không? Đây là những gì tôi hiện đang làm:Trong Scala, kết hợp các phương thức đối tượng như các phương thức lớp

class myClass extends abstractClass { 
    def a_1 = A.a_1 
    def a_2 = A.a_2 
    ... 

    def b_1 = B.b_1 
    def b_2 = B.b_2 
    ... 
} 

Trả lời

4

scala hỗ trợ nhiều inheretence thông qua đặc điểm nhưng một lớp không thể inhereted từ một đối tượng

đây là một ví dụ

object Combiner { 
    trait A { 
    def a_1 = println("Hello A a_1") 
    def a_2 = println("Hello A a_2") 
    } 
    trait B { 
    def b_1 = println("Hello B b_1") 
    def b_2 = println("Hello B b_2") 
    } 
} 
abstract class absractClass { 
    def AC 
} 
class myClass extends absractClass with A with B { 
    override def AC = println("AC from myClass") 
} 
def main(args: Array[String]) { 
    var m = new myClass 
    m.AC 
    m.b_1 
    m.b_2 
    m.a_1 
    m.a_2 
} 
+0

Tôi không biết bạn có thể viết một đặc điểm bên trong một lớp học/vật. Cảm ơn bạn đã trả lời, nó làm cho ngày của tôi :) – OlivierBlanvillain

1

Một cái gì đó như thế này?

trait A { 
    def a_1: Int 
    def a_2: Int 
    def foo = a_1 + a_2 
} 

trait B { 
    def a_1 = 2 
    def a_2 = 3 
} 

class C extends A with B 

println((new C).foo) 
Các vấn đề liên quan