我刚刚在互联网上浏览了一些Scala教程,并注意到在一些示例中,对象是在示例的开头声明的。
Scala中类和对象的区别是什么?
我刚刚在互联网上浏览了一些Scala教程,并注意到在一些示例中,对象是在示例的开头声明的。
Scala中类和对象的区别是什么?
当前回答
Scala类和Java类一样,但是Scala没有在类中提供任何入口方法,就像Java中的main方法一样。与object关键字关联的主要方法。可以将object关键字视为创建隐式定义的类的单例对象。
更多信息请查看这篇文章 scala编程中的类和对象关键字
其他回答
在Scala中定义一个对象就像在Java中定义一个只有静态方法的类。然而,在Scala中,对象可以扩展另一个超类,实现接口,并像类的实例一样传递。(所以它就像类的静态方法,但更好)。
类是一个定义,一个描述。它根据其他类型的方法和组合来定义类型。
一个对象是一个单例——一个类的实例,它保证是唯一的。对于代码中的每个对象,将创建一个匿名类,该类继承于您声明object要实现的任何类。这个类不能从Scala源代码中看到——尽管可以通过反射得到它。
对象和类之间有一种关系。如果一个对象具有相同的名称,则称其为类的伴生对象。当这种情况发生时,双方都可以访问另一方的私有可见性方法。但是,这些方法不会自动导入。您要么必须显式地导入它们,要么以类/对象名作为前缀。
例如:
class X {
// class X can see private members of object X
// Prefix to call
def m(x: Int) = X.f(x)
// Import and use
import X._
def n(x: Int) = f(x)
private def o = 2
}
object X {
private def f(x: Int) = x * x
// object X can see private members of class X
def g(x: X) = {
import x._
x.o * o // fully specified and imported
}
}
在scala中,没有静态的概念。因此,scala创建了一个单例对象,为程序执行提供入口点。 如果您不创建单例对象,您的代码将成功编译,但不会产生任何输出。在单例对象中声明的方法是全局可访问的。单例对象可以扩展类和特征。
Scala单例对象示例
object Singleton{
def main(args:Array[String]){
SingletonObject.hello() // No need to create object.
}
}
object SingletonObject{
def hello(){
println("Hello, This is Singleton Object")
}
}
输出:
Hello, This is Singleton Object
在scala中,当你有一个与单例对象同名的类时,它被称为伴侣类,而单例对象被称为伴侣对象。
伴生类及其伴生对象必须在同一个源文件中定义。
Scala配套对象示例
class ComapanionClass{
def hello(){
println("Hello, this is Companion Class.")
}
}
object CompanoinObject{
def main(args:Array[String]){
new ComapanionClass().hello()
println("And this is Companion Object.")
}
}
输出:
Hello, this is Companion Class.
And this is Companion Object.
在scala中,一个类可以包含:
1. 数据成员
2. 成员方法
3.构造函数块
4. 嵌套类
5. 超班信息等。
必须初始化类中的所有实例变量。没有默认作用域。如果不指定访问范围,则为public。必须有一个对象,其中定义了main方法。它为您的程序提供了起点。在这里,我们创建了一个类的示例。
Scala类示例
class Student{
var id:Int = 0; // All fields must be initialized
var name:String = null;
}
object MainObject{
def main(args:Array[String]){
var s = new Student() // Creating an object
println(s.id+" "+s.name);
}
}
对不起,我来晚了,但我希望这能帮助到你。
形式上的区别
不能为对象提供构造函数参数 对象不是类型-不能使用new操作符创建实例。但它可以有字段、方法、扩展超类和混合特征。
用法上的区别:
Scala没有静态方法或字段。相反,你应该使用object。您可以与相关类一起使用它,也可以不使用它。在第一种情况下,它被称为同伴对象。你必须: 对类和对象使用相同的名称 把它们放在同一个源文件中。 要创建一个程序,你应该在object中使用main方法,而不是在class中。 对象Hello { def main(args: Array[String]) { println(“Hello, World !”) } } 你也可以像在java中使用单例对象一样使用它。
一个对象只有一个实例(你不能调用新的MyObject)。一个类可以有多个实例。
对象与Java中的静态方法和字段具有相同的(以及一些额外的)用途。