scala - Scala 类定义中 protected 关键字的含义是什么?

标签 scala class generics covariance protected

我正在通过“不耐烦的 Scala”一书中的练习来学习 Scala。一项练习要求:

The file Stack.scala contains the definition class Stack[+A] protected (protected val elems: List[A])

Explain the meaning of the protected keywords.



有人可以帮助我理解这一点吗? protected显然对成员变量有意义,但它在类定义中有什么含义?

最佳答案

在 Scala 中,编写

class Stack[+A](elems: List[A]) 

还实现了一个默认构造函数。如果您了解 Java,那么在 Java 中这将类似于
class Stack<A> {
    private List<A> elems; 
    public Stack<A>(List<A> elems){this.elems = elems;}
}

现在,您有两个 protected您示例中的关键字:
  • protected val elems: List[A]
  • protected (/*...*/)

  • 第一个使变量 elems protected ,意味着它只能被 Stack[+A] 的子类访问(和隐藏) .

    第二个使构造函数 protected ,这意味着一个新的 Stack实例只能由 Stack[+A] 的子类创建.

    同样,等效的 Java 代码类似于
    class Stack<A> {
        protected List<A> elems; 
        protected Stack<A>(List<A> elems){this.elems = elems;}
    }
    

    关于scala - Scala 类定义中 protected 关键字的含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30020306/

    相关文章:

    wordpress 将字段添加到 post_class

    java - 使用泛型将 Long[] 和 Integer[] 存储在同一个 HashMap 中

    scala - 光滑3.2 : Filtering on columns from left-joined table

    scala - 如何使用 Play 框架将服务类注入(inject) Spec 类

    unit-testing - 单元测试 Scala Actor

    c++ - 创建用户定义的复制构造函数时无法创建对象

    scala:无法从根范围导入对象

    Java 类实现接口(interface)错误

    c# - 使用泛型接口(interface)的 WCF RESTful 服务

    C++ 输出运算符重载