代码之家  ›  专栏  ›  技术社区  ›  Maths noob

scala:强制子类重写方法的继承实现

  •  1
  • Maths noob  · 技术社区  · 6 年前

    我想定义一个强制其子类型重写的特征,比如 toString 方法。 我能做到吗?

    在更一般的情况下:

    trait Old {
      def foo: String = "oldFoo"
    }
    
    trait New {
      //some statement which would result in "oldFoo" disappearing 
    }
    
    trait New1 extend New {
      def foo: String = "new1Foo"
    } //should compile
    
    trait New2 extend New //shouldn't compile
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Luis Miguel Mejía Suárez    6 年前

    我不认为你想做什么是可能的,但是这个解决办法可以奏效

    trait Old {
      def foo: String = "oldFoo"
    }
    
    trait New extends Old {
      override final def foo: String = newFoo
      def newFoo: String
    }
    
    class New1 extends New {
      override def newFoo: String = "new1Foo"
    } // Compiles
    
    class New2 extends New // Don't compiles
    
    trait NewExtra extends New // Compiles, but any sub class of NewExtra is required to implement newFoo