以下是什么意思以及如何使用它?
abstract class An_Abstract_Class {
def A_method(x : Int) : An_Abstract_Class
}
我知道抽象类中不能有实例或对象,所以这个方法实际返回了什么?
这可以用于创建列表或二叉树吗?
这是一个比具体课更好的技术吗?为什么?
答案 0 :(得分:2)
正如您所指出的,这个类是抽象的,所以它不能是它的任何直接实例。这意味着需要有子类,这些子类必须实现A_method
。那些子类将返回什么?也许是自己的实例,因为它们是An_Abstract_Class
的子类,它们满足返回类型。
例如:
class A_Concrete_Class extends An_Abstract_Class {
def A_method(x:Int) : An_Abstract_Class = this
}
有趣的是,您也可以这样做:
class A_Concrete_Class extends An_Abstract_Class {
def A_method(x:Int) : A_Concrete_Class = this
}
不同之处在于被覆盖的A_method
指定了返回类型A_Concrete_Class
。由于这是An_Abstract_Class
的子类,因此编译就可以了。这被称为"共变体返回类型" - 即允许子类实现的返回类型是基类返回类型的子类型。
你确实可以使用这种东西来实现一个二叉树,尽管在Scala中,更惯用的方法是使用特征和案例类实现。