Jawaban:
class C
mendefinisikan sebuah kelas, seperti halnya di Java atau C ++.object O
menciptakan objek tunggalO
sebagai turunan dari beberapa kelas anonim; dapat digunakan untuk menampung anggota statis yang tidak terkait dengan instance beberapa kelas.object O extends T
menjadikan objek O
sebagai instance dari trait T
; Anda kemudian bisa lewat di O
mana saja, yang T
diharapkan.class C
, maka object C
adalah objek pendamping kelas C
; perhatikan bahwa objek pendamping tidak secara otomatis turunan dari C
.Lihat juga dokumentasi Scala untuk objek dan kelas .
object
sebagai tuan rumah anggota statisPaling sering, Anda memerlukan sebuah object
untuk menyimpan metode dan nilai / variabel yang harus tersedia tanpa harus terlebih dahulu membuat instance instance dari beberapa kelas. Penggunaan ini terkait erat dengan static
anggota di Jawa.
object A {
def twice(i: Int): Int = 2*i
}
Anda kemudian dapat memanggil metode di atas menggunakan A.twice(2)
.
Jika twice
adalah anggota dari beberapa kelas A
, maka Anda harus membuat instance terlebih dahulu:
class A() {
def twice(i: Int): Int = 2 * i
}
val a = new A()
a.twice(2)
Anda dapat melihat betapa mubazirnya ini, karena twice
tidak memerlukan data spesifik-instance.
object
sebagai contoh bernama khususAnda juga dapat menggunakan object
itu sendiri sebagai beberapa contoh khusus dari kelas atau sifat. Ketika Anda melakukan ini, objek Anda perlu memperluas beberapa trait
untuk menjadi turunan dari subkelasnya.
Pertimbangkan kode berikut:
object A extends B with C {
...
}
Deklarasi ini pertama-tama mendeklarasikan kelas anonim (tidak dapat diakses) yang memperluas keduanya B
dan C
, dan membuat instance turunan dari kelas ini bernama A
.
Ini berarti A
dapat diteruskan ke fungsi mengharapkan objek bertipe B
atau C
, atau B with C
.
object
Ada juga ada beberapa fitur khusus objek di Scala. Saya merekomendasikan untuk membaca dokumentasi resmi .
def apply(...)
mengaktifkan sintaks tanpa nama metode biasa A(...)
def unapply(...)
memungkinkan untuk membuat ekstraktor pencocokan pola khususCommerce
kelas, tetapi JVM dan bahasa Java akan melakukannya. (Begitulah cara Anda dapat melakukan object Foo{ def main(args:Seq[String]) }
dan mengharapkan program berjalan.)
A class
adalah definisi, deskripsi. Ini mendefinisikan jenis dalam hal metode dan komposisi jenis lainnya.
An object
adalah singleton - turunan dari sebuah kelas yang dijamin unik. Untuk setiap object
kode, kelas anonim dibuat, yang mewarisi dari kelas apa pun yang Anda nyatakan object
akan diterapkan. Kelas ini tidak dapat dilihat dari kode sumber Scala - meskipun Anda bisa mendapatkannya melalui refleksi.
Ada hubungan antara object
dan class
. Suatu objek dikatakan sebagai objek pendamping kelas jika mereka memiliki nama yang sama. Ketika ini terjadi, masing-masing memiliki akses ke metode private
visibilitas yang lain. Metode ini tidak diimpor secara otomatis. Anda harus mengimpornya secara eksplisit, atau awalan dengan nama kelas / objek.
Sebagai contoh:
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
}
}
def f(x: X) = ???
, maka itu akan dapat memanggil metode pribadi x
, dari kelas pendamping X
.
Objek memiliki tepat satu instance (Anda tidak dapat memanggil new MyObject
). Anda dapat memiliki beberapa instance kelas.
Obyek melayani sama (dan beberapa tambahan) tujuan sebagai metode statis dan bidang di Jawa.
Seperti yang telah dijelaskan oleh banyak orang, object
mendefinisikan contoh tunggal. Satu hal dalam jawaban di sini yang saya yakini ditinggalkan adalah object
melayani beberapa tujuan.
Ini bisa menjadi objek pendamping ke class
/ trait
, yang mengandung apa yang mungkin dianggap metode statis atau metode kenyamanan.
Ia dapat bertindak seperti sebuah modul, berisi tipe dan definisi terkait / tambahan, dll.
Itu dapat mengimplementasikan antarmuka dengan memperluas class
satu atau lebih trait
s.
Itu bisa mewakili kasus dari sealed trait
yang tidak mengandung data. Dalam hal ini, sering dianggap lebih benar daripada case class
tanpa parameter. Kasus khusus sealed trait
dengan case object
implementor hanya kurang lebih adalah versi Scala dari enum.
Itu dapat bertindak sebagai bukti untuk implicit
logika-driven.
Ini memperkenalkan tipe singleton.
Ini adalah konstruksi yang sangat kuat dan umum. Apa yang bisa sangat membingungkan bagi pemula Scala adalah bahwa konstruksi yang sama dapat memiliki kegunaan yang sangat berbeda. Dan object
dapat melayani banyak kegunaan yang berbeda sekaligus, yang bahkan bisa lebih membingungkan.
Mendefinisikan objek di Scala seperti mendefinisikan kelas di Java yang hanya memiliki metode statis. Namun, dalam Scala suatu objek dapat memperluas superclass lain, mengimplementasikan antarmuka, dan diteruskan seolah-olah itu adalah instance dari sebuah kelas. (Jadi seperti metode statis di kelas tapi lebih baik).
Perbedaan formal -
Perbedaan penggunaan:
object
. Anda dapat menggunakannya dengan atau tanpa kelas terkait. Dalam 1 kasus itu disebut objek pengiring. Kamu harus:
Untuk membuat program, Anda harus menggunakan metode utama object
, bukan di class
.
object Hello {
def main(args: Array[String]) {
println("Hello, World!")
}
}
Anda juga dapat menggunakannya saat menggunakan objek singleton di java.
Kata kunci objek membuat tipe singleton baru, yang seperti kelas yang hanya memiliki instance bernama tunggal. Jika Anda terbiasa dengan Java, mendeklarasikan objek dalam Scala sangat mirip dengan membuat instance baru dari kelas anonim.
Scala tidak memiliki padanan dengan kata kunci statis Java , dan sebuah objek sering digunakan dalam Scala di mana Anda mungkin menggunakan kelas dengan anggota statis di Jawa.
Objek adalah kelas tetapi sudah memiliki instance, sehingga Anda tidak dapat memanggil new ObjectName
. Di sisi lain, Kelas hanya mengetik dan itu bisa menjadi contoh dengan memanggil new ClassName()
.
Dalam scala, tidak ada static
konsep. Jadi scala membuat objek tunggal untuk menyediakan titik masuk untuk eksekusi program Anda. Jika Anda tidak membuat objek tunggal, kode Anda akan berhasil dikompilasi tetapi tidak akan menghasilkan output. Metode yang dinyatakan dalam Singleton Object dapat diakses secara global. Objek tunggal dapat memperluas kelas dan sifat.
Contoh Objek Scala Singleton
object Singleton{
def main(args:Array[String]){
SingletonObject.hello() // No need to create object.
}
}
object SingletonObject{
def hello(){
println("Hello, This is Singleton Object")
}
}
Keluaran:
Hello, This is Singleton Object
Dalam scala, ketika Anda memiliki kelas dengan nama yang sama dengan objek singleton, itu disebut kelas pendamping dan objek singleton disebut objek pendamping.
Kelas pendamping dan objek pendampingnya keduanya harus didefinisikan dalam file sumber yang sama.
Contoh Objek Pengiring 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.")
}
}
Keluaran:
Hello, this is Companion Class.
And this is Companion Object.
Dalam scala, sebuah kelas dapat berisi:
1. Anggota data
2. Metode anggota
3. Blok Konstruktor
4. Kelas bersarang
5. Informasi kelas super dll.
Anda harus menginisialisasi semua variabel instan di kelas. Tidak ada ruang lingkup standar. Jika Anda tidak menentukan ruang lingkup akses, itu publik. Harus ada objek di mana metode utama didefinisikan. Ini memberikan titik awal untuk program Anda. Di sini, kami telah membuat contoh kelas.
Contoh Contoh Scala Kelas
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);
}
}
Maaf, saya terlambat tetapi saya harap ini akan membantu Anda.
Kelas scala sama dengan Kelas Java tetapi scala tidak memberi Anda metode entri di kelas, seperti metode utama di java. Metode utama yang terkait dengan kata kunci objek. Anda dapat menganggap kata kunci objek sebagai menciptakan objek tunggal kelas yang didefinisikan secara implisit.
informasi lebih lanjut periksa kelas artikel ini dan kata kunci objek dalam pemrograman scala
Objek ini mirip dengan kelas statis di Jawa untuk beberapa perluasan, karakteristik statis berarti kelas statis tidak perlu membuat objek saat meletakkan ke JVM, dapat digunakan oleh nama kelas itu secara langsung dan contoh yang sama (keadaan data yang sama ) dibagikan di mana pun ia digunakan.
Kelas sama seperti kelas lain dalam bahasa lain. Anda mendefinisikan kelas sama seperti bahasa lain dengan beberapa perbedaan sintaksis.
class Person(val name: String)
val me = new Person("My name")
Namun, objek adalah kelas dengan objek tunggal saja. Ini membuatnya menarik karena dapat digunakan untuk membuat anggota statis kelas menggunakan objek pendamping . Objek pendamping ini memiliki akses ke anggota pribadi dari definisi kelas dan memiliki nama yang sama dengan kelas yang Anda tetapkan.
class Person(var name: String) {
import Person._
def hi(): String = sayHello(name)
}
object Person {
private def sayHello(name: String): String = "Hello " + name
}
val me = new Person("My name")
me.hi()
Juga, poin penting adalah bahwa kelas objek dibuat dengan malas yang merupakan poin penting lainnya. Jadi, ini tidak dipakai kecuali mereka diperlukan dalam kode kami.
Jika Anda mendefinisikan pembuatan koneksi untuk JDBC, Anda dapat membuatnya di dalam objek untuk menghindari duplikasi seperti yang kita lakukan di Jawa dengan objek tunggal.
Jika Anda berasal dari latar belakang java, konsep class di scala agak mirip dengan Java, tetapi class di scala tidak boleh berisi anggota statis.
Objek dalam scala adalah tipe tunggal yang Anda panggil metode di dalamnya menggunakan nama objek, dalam objek scala adalah kata kunci dan objek java adalah instance dari kelas