我的目标是使用特征混合来增强现有Java类的内部scala代码.例如,将java.awt.Rectangle.translate(dx,dy)等方法添加到java.awt.geom.Ellipse2D类中.为此,我创建了以下特征:
trait RectangleLike {
var x: Double // abstract vals to correspond to java class fields
var y: Double // I need these vars to refer to them inside translate method
def translate(dx: Double, dy: Double) {
x = x + dx
y = y + dy
}
// more concrete trait methods here
} // defines without errors in scala REPL
Run Code Online (Sandbox Code Playgroud)
然后在构造Ellipse时使用trait:
val egg = new java.awt.geom.Ellipse2D.Double(5, 10, 20, 30) with RectangleLike
Run Code Online (Sandbox Code Playgroud)
但是当我在scala REPL中执行上面的脚本时,我得到以下输出:
<console>:8: error: overriding variable x …Run Code Online (Sandbox Code Playgroud)