【发布时间】:2020-04-23 01:39:36
【问题描述】:
我设计了一个相当简单的例子来说明我的观点,如下所示:
abstract class AbstractSuperClass {
protected def someFunction(num: Int): Int
def addition(another: AbstractSuperClass, num: Int): Int
}
class SubclassSquare extends AbstractSuperClass {
override protected def someFunction(num: Int): Int = num * num
override def addition(another: AbstractSuperClass, num: Int): Int =
someFunction(num) + another.someFunction(num)
}
我在执行代码时收到以下错误消息。 (当然,main 函数是正确定义的。)
Error:(12, 33) 类 AbstractSuperClass 中的方法 someFunction 无法在 AbstractSuperClass 中访问 不允许访问受保护的方法 someFunction,因为 前缀类型 AbstractSuperClass 不符合 class 访问发生的子类 someFunction(num) + another.someFunction(num)
addition 方法导致了问题。该代码尝试访问 AbstractSuperClass 实例的受保护字段,但从我的角度来看,它在这里应该没有问题,因为 SubclassSquare 是 AbstractSuperClass 的子类。
但是,我知道这里肯定有一些我不明白的地方。我想知道如何更改我的代码以使其编译。好评。
【问题讨论】:
-
您似乎无法访问另一个实例上的
protected字段。但是,这对我来说似乎是一个错误。 -
是的,通常你可以访问另一个对象的受保护字段,只要它们都是同一个类的实例。从技术上讲,参数
another和this都是AbstractSuperClass 的实例,所以人们会认为它有效,但显然不是。 -
开场截击加一个,或者如果你愿意,莎莉。我希望他们为错误跟踪器添加一个模板,开头是:“我设计了一个相当简单的例子来说明我的观点,如下所示。”