def vs val To Define Abstract Members

def vs val To Define Abstract Members

The short story is that if you want to declare an abstract member in a trait, as a def or val field that may be later fulfilled in an implementing class, the most flexible approach is to define the member as a def. The primary benefit of this approach is explained in Figure.


val can override a def

no_error

def cannot override a val

compilation_error

As the error message implies, using val means a guarantee that the variable is stable and immutable, and def does not mean that same guarantee.

In general, overriding says, that downgrading is not allowed But while using def instead of val we are downgrading the stable and immutable behavior of val.

If you use var field instead of val the error message will go away. But Scala/FP developers don’t use var fields.

要查看或添加评论,请登录

Anish Kumar的更多文章

  • Understanding Functor

    Understanding Functor

    Functor represents a data structure or context that can be mapped over. It provides a way to apply a function to the…

    1 条评论
  • Monad For Beginners

    Monad For Beginners

    Monads are a fundamental concept in functional programming that represents computations that can be composed and…

  • Basic Hierarchy of Scala Cat

    Basic Hierarchy of Scala Cat

  • Sorting in Scala: sorted method

    Sorting in Scala: sorted method

    Sorting in Scala is very similar to sorting in Java like Java's Comparable called Ordered and Java's Comparator called…

  • Anonymous Function: LAMBDA

    Anonymous Function: LAMBDA

    Dream: Use the function as a first-class element like val and var, which can be passed to the function as parameters…

  • Diamond Problem

    Diamond Problem

    The Diamond Problem occurs when a class inherits from two or more parent classes with the same method or field. This…

  • Variance In Scala

    Variance In Scala

    1. All values have a type 2.

  • Match Patterns For Scala Classes

    Match Patterns For Scala Classes

    Pattern matching on case classes is straightforward because it provides extractor patterns out of the box. If we need…

  • Commonly Used Short Hands

    Commonly Used Short Hands

    infix/operator notation: A method with a single parameter can be used as an operator prefix notation: unary_prefix…

  • Partial Function In Scala

    Partial Function In Scala

    val aFunction = (x: Int) => x + 1 Here aFunction is an instance of Function1[Int, Int] ===== (Int) => (Int) which will…

社区洞察

其他会员也浏览了