【发布时间】:2014-12-06 23:12:29
【问题描述】:
我已经用谷歌搜索了几种不同的方法……但还没有找到明确的答案。
class Foo1 { }
class Foo2 extends Foo1 { }
class Bar1 {
var foo: Foo1 = null
}
class Bar2 extends Bar1 {
var foo: Foo2 = null // <-- compiler error
}
错误提示:“覆盖 test.Foo1 类型的 Bar1 类中的变量 foo;变量 foo 需要 `override' 修饰符”但您也不能覆盖 var。
在 C# 中,您可以像这样使用 new 关键字
class Foo1 { }
class Foo2 : Foo1 { }
class Bar1
{
public Foo1 foo = null;
}
class Bar2 : Bar1
{
public new Foo2 foo = null;
}
在 Scala 中可以做到这一点吗?
编辑 -- 添加了另一个 C# 示例来说明我这样做的原因。
class Foo1 { }
class Foo2 : Foo1 { }
class Bar1
{
public Foo1 Foo { get { return _foo; } }
protected Foo1 _foo;
public Bar1(Foo1 foo) { _foo = foo; }
}
class Bar2 : Bar1
{
public new Foo2 Foo { get { return _foo; } }
protected new Foo2 _foo;
public Bar2(Foo2 foo) : base(foo) { _foo = foo; }
}
当然,在真正的应用程序中,类要复杂得多,成员很多,层次结构更深。
简而言之,这对我来说是它允许我在我的类层次结构中的任何地方使用 foo 变量,而不必使用丑陋的演员表——如果我只在酒吧1级。
谢谢!
【问题讨论】:
-
我不懂 C#,
foo可以在你的第二个代码 sn-p 中赋值吗? -
@Dimitri 是的,如果你的意思是说 x 是 Bar2 的一个实例,那么 x.foo = new Foo2() 是有效代码......但是这个例子有点做作,因为这不是我真正的方式在我正在考虑从 C# 迁移到 Scala 的应用程序中使用它。我将在此处留下另一条消息或编辑我的问题以解释更多为什么/我需要它的原因。
标签: scala