Scala class 定义中受保护关键字的含义是什么?
What's the implication of protected keywords in class definition in Scala?
我正在通过书中的练习来学习 Scala "Scala for the Impatient"。一项练习要求:
The file Stack.scala contains the definition class Stack[+A]
protected (protected val elems: List[A])
Explain the meaning of the protected
keywords.
谁能帮我理解一下? protected
显然对成员变量有意义,但它在 class 定义中有什么含义?
在 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
受到保护,这意味着它只能由 Stack[+A]
的子类访问(和隐藏)。
第二个使构造函数受保护,这意味着新的 Stack
实例只能由 Stack[+A]
的子类创建。
同样,等效的 Java 代码类似于
class Stack<A> {
protected List<A> elems;
protected Stack<A>(List<A> elems){this.elems = elems;}
}
我正在通过书中的练习来学习 Scala "Scala for the Impatient"。一项练习要求:
The file Stack.scala contains the definition
class Stack[+A] protected (protected val elems: List[A])
Explain the meaning of the
protected
keywords.
谁能帮我理解一下? protected
显然对成员变量有意义,但它在 class 定义中有什么含义?
在 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
受到保护,这意味着它只能由 Stack[+A]
的子类访问(和隐藏)。
第二个使构造函数受保护,这意味着新的 Stack
实例只能由 Stack[+A]
的子类创建。
同样,等效的 Java 代码类似于
class Stack<A> {
protected List<A> elems;
protected Stack<A>(List<A> elems){this.elems = elems;}
}