单个对象的protected [package]和private [package]之间的区别

时间:2014-09-05 09:26:18

标签: scala object inheritance scope

我试图将对象中存在的方法的访问权限限制为对象所属的包。 该方法由包内的许多类使用。我有两个选择:

protected[pkg] object MyObject{....}

private[pkg] object MyObject{....}

他们两个都很好。 我的问题是,既然对象不能被任何类/对象扩展,那么它们不是等价的吗?

1 个答案:

答案 0 :(得分:2)

顶层,是的,它们最终以Java形式公开(不是默认访问)。

但是:

package accesstest {
    trait T {
        protected[accesstest] object Foo { def foo = 7 }
        private[accesstest] object Bar { def bar =  8 }
    }

    object Test extends App {
        val t = new T {}
        Console println t.Foo.foo
        Console println t.Bar.bar
        Console println other.Other.foo
    }
}
package other {
    object Other extends accesstest.T {
        def foo = Foo.foo
        //def bar = Bar.bar  // nope
    }
}

所以重要的是封闭事物的可扩展性和访问权。