Scala Language
Объем
Поиск…
Вступление
Область Scala определяет, где можно получить доступ к значению ( def
, val
, var
или class
).
Синтаксис
- декларация
- частная декларация
- частное [это] заявление
- частная декларация [fromWhere]
- защищенная декларация
- защищенная декларация [fromWhere]
Открытая (по умолчанию) область
По умолчанию область видимости является public
, доступ к которой можно получить из любого места.
package com.example {
class FooClass {
val x = "foo"
}
}
package an.other.package {
class BarClass {
val foo = new com.example.FooClass
foo.x // <- Accessing a public value from another package
}
}
Частный охват
Когда область является частной, ее можно получить только из текущего класса или других экземпляров текущего класса.
package com.example {
class FooClass {
private val x = "foo"
def aFoo(otherFoo: FooClass) {
otherFoo.x // <- Accessing from another instance of the same class
}
}
class BarClass {
val f = new FooClass
f.x // <- This will not compile
}
}
Частный пакетный охват
Вы можете указать пакет, в котором можно получить доступ к частному значению.
package com.example {
class FooClass {
private val x = "foo"
private[example] val y = "bar"
}
class BarClass {
val f = new FooClass
f.x // <- Will not compile
f.y // <- Will compile
}
}
Личный охват объекта
Наиболее ограничительной областью является область «объект-частный» , которая позволяет только доступ к этому значению из одного и того же экземпляра объекта.
class FooClass {
private[this] val x = "foo"
def aFoo(otherFoo: FooClass) = {
otherFoo.x // <- This will not compile, accessing x outside the object instance
}
}
Защищенная область действия
Защищенная область позволяет доступ к значению из любых подклассов текущего класса.
class FooClass {
protected val x = "foo"
}
class BarClass extends FooClass {
val y = x // It is a subclass instance, will compile
}
class ClassB {
val f = new FooClass
f.x // <- This will not compile
}
Защищенный пакет
Область, защищенная пакетом, позволяет доступ к значению только из любого подкласса в определенном пакете.
package com.example {
class FooClass {
protected[example] val x = "foo"
}
class ClassB extends FooClass {
val y = x // It's in the protected scope, will compile
}
}
package com {
class BarClass extends com.example.FooClass {
val y = x // <- Outside the protected scope, will not compile
}
}
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow