[英]Is an interface and an abstract class with just virtual abstract methods the same thing?
[英]Are there such thing as class methods in Scala?
許多oo語言為類方法和類變量提供了一定的便利。 例如Ruby允許使用元類。 在Scala中以類似的方式查看伴侶對象是否公平?
在Scala中以類似的方式查看伴侶對象是否公平?
是的,這是考慮它們的合理方法。
在JVM上,類的含義不同於在Ruby或其他動態語言中的對象。 當然,您可以將類的表示形式表示為類Class[_]
的特殊對象,但是它主要用於反射,例如,不能具有自定義方法。 但是,JVM具有與類相關聯的靜態方法和字段的概念,並且不需要使用該類的對象:
public class SomeClass
public static int add(int x, int y) { return x + y; }
}
public class OtherClass {
public static void main() {
int z = SomeClass.add(1, 2);
}
}
這些方法和字段本質上是“全局”的(除非我們考慮使用類加載器機制),例如,方法不能在子類中覆蓋。
Scala不允許您直接定義和使用靜態-語言中沒有“靜態”的概念。 但是,在Scala中,您可以定義可用於模擬靜態字段和方法的單例對象,同時它們比靜態函數強大得多,例如,它們可以參與繼承。 在內部,這些對象是Scala編譯器為您生成的特殊類的實例。
Scala還具有一種特殊的此類單例對象,稱為伴侶對象,它們與某些類共享名稱:
class SomeClass
object SomeClass
國內這些對象是完全不同的類比的情況下SomeClass
(它可以作為訪問SomeClass.type
),但斯卡拉對待他們特殊的方式,例如,你可以訪問SomeClass
私人會員SomeClass
同伴對象,反之亦然。 伴隨對象還提供其他隱式作用域。 但是, SomeClass.type
和SomeClass
是完全不同的類。
簡而言之,是的,您可以將伴隨對象視為“類”方法和字段的容器,但僅在某種程度上。 伴侶對象無論如何都不是元類。 它們具有完全不同的語義和實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.