2017-07-18 26 views
5

Tôi đang cố gắng để mở rộng, trong Java, một Kotlin ủy lớp và nhận được lỗi sau:Tôi có thể mở rộng, trong Java, một lớp học ủy thác Kotlin không?

Cannot inherit from final 'Derived'

Xem mã dưới đây.

Điều tôi đang cố làm là trang trí phương thức của một lớp.

Bất kỳ ý tưởng nào tại sao Kotlin xác định Derived là cuối cùng? Có cách nào cho số Derived không phải là cuối cùng để tôi có thể kế thừa không?

Java:

new Derived(new BaseImpl(10)) { // Getting the error on this line: `Cannot inherit from final 'Derived'` 
}; 

Kotlin:

interface Base { 
    fun print() 
} 

class BaseImpl(val x: Int) : Base { 
    override fun print() { print(x) } 
} 

class Derived(b: Base) : Base by b 

* Ví dụ từ đây: https://kotlinlang.org/docs/reference/delegation.html

Trả lời

9

Kotlin classes are final in by default. Đánh dấu các lớp như open để mở rộng nó (cho dù từ Kotlin hoặc từ Java):

open class Derived(b: Base) : Base by b 

Thực tế đây là một lớp Delegating nên không có ảnh hưởng trên Java interop (mặc dù tôi đã không thử nó).

Các vấn đề liên quan