【问题标题】:Extend the class of an object instance in scala在scala中扩展对象实例的类
【发布时间】:2014-05-04 03:22:01
【问题描述】:

假设我有一个具有许多方法的类的实例,并且我想扩展该对象中的一个方法的行为。在java中,我想我必须创建一个将所有调用重定向到实例的包装器,然后我可以重新定义包装器中的相关方法。但我想知道在 scala 中是否有其他更聪明的方法可以做到这一点?

比如

class A {
  def x = 1
  def y = 2
  def z = 3
}

val a = new A

val a2 = wrap(a) { override def z = 4 } // ???

问候 设计

【问题讨论】:

  • “对象实例的类” A。这个事实(关于对象)不能改变,A的定义也不能:a2必须是一个新对象。
  • 这里有 Kevin Wright 制作的 autoproxy 插件。也许这会有所帮助?

标签: java scala inheritance


【解决方案1】:

在 Java 中,我们可以扩展整个类。由程序员决定哪些方法被覆盖。我们使用“extends”关键字来执行此任务。

public class A
{
  public void method1(){...}
  public void method2(){...}
}

public class B extends A
{
  public void method2(){...}
  public void method3(){...}
}

对于 B 类,我们使用 extends 关键字。由于继承,类B继承了method1,在这种情况下覆盖了method2并添加了另一个名为method3的方法。希望这会有所帮助。

【讨论】:

  • s/覆盖/覆盖
猜你喜欢
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 2017-01-30
  • 1970-01-01
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多