Yanıtlar:
class C
Java veya C ++ 'da olduğu gibi bir sınıfı tanımlar.object O
anonim bir sınıfın örneği olarak tek bir nesne oluşturur O
; bazı sınıf örnekleri ile ilişkili olmayan statik üyeleri tutmak için kullanılabilir.object O extends T
nesneyi O
bir örneği yapar trait T
; daha sonra O
herhangi bir yere geçebilirsiniz , a T
bekleniyor.class C
, o zaman object C
bir tamamlayıcı nesne sınıfı C
; tamamlayıcı nesnenin otomatik olarak bir örneği olmadığını unutmayın C
.Ayrıca nesne ve sınıf için Scala belgelerine bakın .
object
statik üyelerin ev sahibi olarakÇoğu zaman, object
önce bir sınıfın örneğini başlatmak zorunda kalmadan kullanılabilecek yöntemleri ve değerleri / değişkenleri saklamanız gerekir. Bu kullanım static
Java üyeleriyle yakından ilgilidir .
object A {
def twice(i: Int): Int = 2*i
}
Daha sonra kullanarak yukarıdaki yöntemi çağırabilirsiniz A.twice(2)
.
Bir twice
sınıfın üyesi A
olsaydınız, önce bir örnek oluşturmanız gerekir:
class A() {
def twice(i: Int): Int = 2 * i
}
val a = new A()
a.twice(2)
twice
Herhangi bir örneğe özgü veri gerektirmediği için bunun ne kadar gereksiz olduğunu görebilirsiniz .
object
özel olarak adlandırılmış bir örnek olarakobject
Kendini bir sınıf veya özelliğin özel bir örneği olarak da kullanabilirsiniz . Bunu yaptığınızda, nesnenizin trait
alt sınıfının bir örneği olabilmesi için bazılarını genişletmesi gerekir.
Aşağıdaki kodu göz önünde bulundurun:
object A extends B with C {
...
}
Bu açıklama ilk ikisi uzanan anonim (erişilemez) sınıfı bildirir B
ve C
ve adlandırılmış bu sınıfın tek bir örneğini başlatır A
.
Bu araçlar A
türündeki nesneleri bekliyor işlevlerine geçirilebilir B
veya C
ya B with C
.
object
Scala'da nesnelerin bazı özel özellikleri de var. Resmi belgeleri okumanızı tavsiye ederim .
def apply(...)
olağan yöntem adsız sözdizimini etkinleştirir A(...)
def unapply(...)
özel desen eşleme çıkarıcılar oluşturmanıza olanak tanırCommerce
sınıfı tanımayacak , ancak JVM ve Java dili tanıyacak. ( object Foo{ def main(args:Seq[String]) }
Programın böyle çalışmasını bekleyebilirsiniz.)
A class
bir tanımdır, bir tanımdır. Bir türü yöntemler ve diğer türlerin bileşimi açısından tanımlar.
An object
bir singleton - benzersiz olduğu garanti edilen bir sınıf örneğidir. Koddaki her object
biri için, object
uyguladığınızı bildirdiğiniz sınıflardan miras kalan anonim bir sınıf oluşturulur . Bu sınıf Scala kaynak kodundan görülemez - buna rağmen yansıma yoluyla alabilirsiniz.
Arasında bir ilişki vardır object
ve class
. Bir nesnenin, aynı adı paylaşmaları durumunda bir sınıfın tamamlayıcı nesnesi olduğu söylenir. Bu olduğunda, her birinin private
diğerinde görünürlük yöntemlerine erişimi vardır . Ancak bu yöntemler otomatik olarak içe aktarılmaz. Bunları açıkça içe aktarmanız veya sınıf / nesne adıyla ön ek yapmanız gerekir.
Örneğin:
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) = ???
, o zaman x
tamamlayıcı sınıfın özel yöntemlerini çağırabilirdi X
.
Bir nesnenin tam olarak bir örneği vardır (çağıramazsınız new MyObject
). Bir sınıfın birden çok örneğine sahip olabilirsiniz .
Nesne , Java'daki statik yöntemler ve alanlarla aynı (ve bazı ek) amaçlara hizmet eder .
Birçok kişi tarafından açıklandığı gibi, object
tekil bir örneği tanımlar. Buradaki cevaplarda dışarıda kaldığına inandığım tek şey, object
birkaç amaca hizmet ediyor olması.
Statik yöntemler veya uygunluk yöntemleri olarak düşünülebilecek şeyleri içeren bir class
/ nesnesine eşlik eden nesne trait
olabilir.
İlgili / yardımcı türleri ve tanımları vb. İçeren bir modül gibi davranabilir.
Bir class
veya bir veya daha fazla trait
s genişleterek bir arabirim uygulayabilir .
sealed trait
Veri içermeyen bir durumu temsil edebilir . Bu bakımdan, genellikle case class
parametresiz bir a'dan daha doğru kabul edilir . sealed trait
Sadece case object
uygulayıcıları olan özel bir durum , bir numaralandırmanın aşağı yukarı Scala versiyonudur.
implicit
Tahriş olmuş mantığın kanıtı olabilir .
Tekli bir tip sunar.
Çok güçlü ve genel bir yapı. Scala yeni başlayanlar için çok kafa karıştırıcı olabilecek şey, aynı yapının çok farklı kullanımlara sahip olabileceğidir. Ve object
bu farklı kullanımların birçoğuna aynı anda hizmet edebilir, bu da daha da kafa karıştırıcı olabilir.
Scala'da bir nesne tanımlamak, Java'da yalnızca statik yöntemlere sahip bir sınıf tanımlamak gibidir. Bununla birlikte, Scala'da bir nesne başka bir üst sınıfı genişletebilir, arayüzleri uygulayabilir ve sanki bir sınıf örneğiymiş gibi aktarılabilir. (Yani bir sınıftaki statik yöntemler gibi ama daha iyisi).
Resmi fark -
Kullanımdaki fark:
object
. İlgili sınıfla veya sınıfsız kullanabilirsiniz. 1. durumda buna yardımcı nesne denir. Yapmalısın:
Bir program oluşturmak için object
değil, ana yöntemi kullanmalısınız class
.
object Hello {
def main(args: Array[String]) {
println("Hello, World!")
}
}
Java'da singleton nesnesi kullandığınızda da kullanabilirsiniz.
Nesne anahtar bir benzeri olan yeni tekil türünü yaratan sınıfın sadece tek adlandırılmış örneği vardır. Java'ya aşina iseniz , Scala'da bir nesne bildirmek, anonim bir sınıfın yeni bir örneğini oluşturmak gibidir.
Scala, Java'nın statik anahtar kelimesine eşdeğer değildir ve Scala'da genellikle Java'da statik üyelere sahip bir sınıf kullanabileceğiniz bir nesne kullanılır.
Nesne bir sınıftır, ancak zaten bir örneğidir (yani), yani çağıramazsınız new ObjectName
. Öte yandan, Class sadece türdür ve arayarak bir örnek olabilir new ClassName()
.
Skala'da bir static
kavram yoktur . Bu nedenle scala, program yürütmeniz için giriş noktası sağlamak üzere tek bir nesne oluşturur. Singleton nesnesi oluşturmazsanız, kodunuz başarıyla derlenir ancak çıktı üretilmez. Singleton Object içinde bildirilen yöntemlere global olarak erişilebilir. Tek bir nesne, sınıfları ve özellikleri genişletebilir.
Scala Singleton Nesne Örneği
object Singleton{
def main(args:Array[String]){
SingletonObject.hello() // No need to create object.
}
}
object SingletonObject{
def hello(){
println("Hello, This is Singleton Object")
}
}
Çıktı:
Hello, This is Singleton Object
Scala'da, singleton nesnesiyle aynı ada sahip bir sınıfınız varsa, buna companion sınıfı ve singleton nesnesine companion nesnesi denir.
Tamamlayıcı sınıf ve tamamlayıcı nesnesinin her ikisi de aynı kaynak dosyada tanımlanmalıdır.
Scala Yardımcı Nesne Örneği
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.")
}
}
Çıktı:
Hello, this is Companion Class.
And this is Companion Object.
Scala dilinde bir sınıf şunları içerebilir:
1. Veri üyesi
2. Üye yöntemi
3. Oluşturucu Bloğu
4. İç içe sınıf
5. Süper sınıf bilgileri vb.
Sınıftaki tüm örnek değişkenleri başlatmalısınız. Varsayılan kapsam yoktur. Erişim kapsamını belirtmezseniz, herkese açıktır. Ana yöntemin tanımlandığı bir nesne olmalıdır. Programınız için başlangıç noktası sağlar. Burada bir sınıf örneği oluşturduk.
Scala Sınıf Örneği Örneği
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);
}
}
Üzgünüm, çok geç kaldım ama umarım size yardımcı olacaktır.
Scala sınıfı Java Sınıfı ile aynıdır ancak scala, java'daki ana yöntem gibi sınıfta herhangi bir giriş yöntemi vermez. Nesne anahtar kelimesi ile ilişkili ana yöntem. Object anahtar sözcüğünü, örtülü olarak tanımlanan bir sınıfın tekli nesnesini oluşturmak olarak düşünebilirsiniz.
daha fazla bilgi scala programlamada bu makale sınıfını ve nesne anahtar sözcüğünü kontrol edin
Sınıf, diğer dillerdeki diğer sınıflar gibidir. Sınıfı, diğer sözdizimi farkları olan diğer diller gibi tanımlarsınız.
class Person(val name: String)
val me = new Person("My name")
Ancak, nesne yalnızca tek nesneli bir sınıftır. Bu, onu tamamlayıcı nesne kullanarak bir sınıfın statik üyeleri oluşturmak için kullanılabileceği için ilginç kılar . Bu tamamlayıcı nesne, sınıf tanımının özel üyelerine erişebilir ve tanımladığınız sınıfla aynı ada sahiptir.
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()
Ayrıca, dikkat çeken nokta, bir başka önemli nokta olan nesne sınıfının tembel olarak yaratılmış olmasıdır. Bu nedenle, kodumuzda gerekli olmadıkça bunlar somutlaştırılmaz.
JDBC için bağlantı oluşturmayı tanımlıyorsanız, Java'da tekil nesnelerle yaptığımız gibi çoğaltmayı önlemek için bunları nesnenin içinde oluşturabilirsiniz.
Java geçmişinden geliyorsanız scala'daki sınıf kavramı Java'ya benzerdir, ancak scala'daki sınıf statik üyeler içeremez.
Scala içindeki nesneler, nesne adını kullanarak içindeki yöntemleri çağırdığınız tekli türdür, scala nesnesindeki bir anahtar kelime ve java nesnesindeki sınıfın bir örneğidir