你可以在Scala中覆盖特征中的私有方法吗?

时间:2018-06-06 18:06:19

标签: scala

我有一个特点:

object ImplementingThing extends Thing[SomeThing1, Something2] {
    ...
    override def SomeMethod() =
      s"SomeOtherFilePathString"

和一些扩展这个特征的对象:

function [x,y,w,z] = check_location(j,new_loc,size)

disp(j);
a = j / size + 1; %Finds 1st element of compared array
b = mod(j,size); %Finds 1st element of comparing array

int8(a) %Must be whole integer
int8(b) %" "

fprintf('a = %g',a)

if b == 0 %1st element cannot be 0
    b = b + 1;
else
    ;
end

fprintf('b = %g',b)

x = new_loc(a,1); % [x y]
y = new_loc(a,2);
w = new_loc(b,1); % [w z]
z = new_loc(b,2);

这可能吗?或者我是否必须将特征的私有方法公开?如果无法做到这一点,背后的原因是什么呢?

此外,快速无关的问题(我知道,但我省了一个帖子),特质所定义的A和B之间的关系是什么?

1 个答案:

答案 0 :(得分:2)

私有方法对于实现者和外部类都是不可见的。因此,不,您不能覆盖私有方法。出于同样的原因,您也不能拥有抽象的私有方法。

@ trait Lol {
    private val a: Int
  }

cmd0.sc:2: abstract member may not have private modifier
  private val a: Int
              ^
Compilation Failed

另一方面,受保护的方法对于实现者是可见的,但对于外部类是不可见的。可以覆盖受保护的方法。