2013-07-22 119 views
2

在下面的示例中,我希望總和 getter將返回8,但它是一個編譯錯誤。爲抽象類中的方法提供默認實現

Class 'B' has no instance getter 'sum'. 

根據規範:

使用抽象類而不是一個接口的具有重要 優勢。抽象類可以提供默認實現;它也可以提供靜態方法,從而避免需要服務 類,例如集合或列表,其全部目的是將 實用程序與給定類型相關聯。

提供添加x和y的sum的默認實現的正確方法是什麼?

abstract class A { 
    int get x; 
    int get y; 
    int get sum => x+y; 
} 

class B implements A { 
    int get x => 3; 
    int get y => 5; 
} 

main() { 
    B b = new B(); 
    print(b.x); 
    print(b.sum); // Not working, why not 8? 
} 

回答

4

你必須要B延長A,而不是實施

abstract class A { 
    int get x; 
    int get y; 
    int get sum => x+y; 
} 

class B extends A { 
    int get x => 3; 
    int get y => 5; 
} 

main() { 
    B b = new B(); 
    print(b.x); 
    print(b.sum); // displays 8 
} 

或者,如果你不想使用擴展因爲你的類可能已經擴展的其他類,你可以使用mixins

abstract class M { 
    int get x; 
    int get y; 
    int get sum => x+y; 
} 

class A { 
    String s = "s"; 
} 
class B extends A with M { 
    int get x => 3; 
    int get y => 5; 
} 

main() { 
    B b = new B(); 
    print(b.s); 
    print(b.x); 
    print(b.sum); // displays 8 
} 
相關問題