Scala - are classes sufficient?
来自Java的我对Scala的类/对象区分感到困惑。请注意,我不要求正式的区别;这已经足够了网上的参考资料解释了这一点,并有相关问题所以。
我的问题是:
谢谢。
Java类包含两种完全不同类型的成员——实例成员(例如EDCOX1(0))和静态成员(例如EDCOX1(1))。在scala中,只有实例成员。这实际上是一个简化!但这也留下了一个问题:我们应该把像
1 2 3 4 5 6 7 |
您可以将其视为匿名类的声明及其单个实例化:
1 2 3 4 |
在读取scala代码时,区分类型和值是至关重要的。我已将Intellij配置为突出显示蓝色类型。
1 2 | val ls = List.empty[Int] // List is a value, a reference the the object List ls: List[Int] // List is a type, a reference to class List |
Java还有另一个在Scala中被移除的复杂度——字段和方法之间的区别。接口上不允许使用字段,除非它们是静态的和最终的;方法可以被重写,如果在子类中重新定义,则字段将被隐藏。scala消除了这种复杂性,只向程序员公开方法。
最后,对第二个问题的一个巧妙的回答是:如果您没有声明任何对象,那么您的程序可能永远不会运行,因为您要在scala中定义等效的
scala对标准类没有任何静态方法的概念,因此在这些场景中,您必须使用对象。这里的有趣文章提供了一个很好的介绍:
http://www.codecommit.com/blog/scala/scala-for-java-disumps-part-3
(向下滚动到scala的statics类)
一种方法就是这样。执行程序由对象和线程组成。线程在对象的上下文中执行代码——也就是说,线程总是在其中执行一个"this"对象。从Java的意义上讲,这是一个简化,在Java中,并不总是存在"这个"。但现在有一个鸡/蛋的问题。如果对象是由线程创建的,而线程是在对象内执行的,那么什么对象是最初在对象内执行的第一个线程。程序执行开始时必须存在一组非空的对象。这些是用