Sınıf ve tür arasındaki fark


105

Java'da yeni olduğum için sınıf ve tür kavramları arasında kafam karıştı . Örneğin, nesne türe mi yoksa sınıfa"Hello World!"ait olmalıdır ? Ya da belki ikisi birden? String String


24
Son zamanlarda, iyi olup olmadıklarına dair herhangi bir "başlangıç" tarzı soruyu olumsuz oylama eğilimi var gibi görünüyor. En azını söylemek can sıkıcı.
nico_c

9
Ayrıca seçmenin anlamadığı herhangi bir soruyu olumsuz oylamak için ...
Marquis of Lorne

4
Yeni başlayanlar için sorular derken olumsuz oy kullanmanın kabalık olduğuna katılıyorum, ancak ister iyi ister kötü olsun, tüm başlangıç ​​sorularının yanıtları yalnızca web'de arama yaparak verilir. Sorun ve insanların olumsuz oy kullanmasının nedeni, bunun yığın taşmasına yol
açması

13
Bu harika bir soru - ve kapatılacak 3 oy, açık kalabilmek için neden oy verebilmemiz gerektiğidir . Java'yı öğrenirken OO jargonunun en büyük engel olduğunu hala hatırlıyorum.
Lawrence Dol

4
@nickecarlo Sıkça Sorulan Sorular'da geçen yıl içinde çıkarılmış gibi görünen bir nokta vardı - "soru ciddi araştırma eksikliğini gösteriyor ve soruyu sormadan önce sorunu çözmek için yapılan çaba belirtilerini göstermiyor ". Buradaki insanlar yerine Google'ın "programlama 101" i başkalarına açıklamak için zamanlarını boşa harcamak yerine çözebileceği BİR TON saçma soru olması can sıkıcı buluyorum.
TC1

Yanıtlar:


123

Sınıf bir türdür. Arayüz bir türdür. İlkel bir türdür. Dizi bir türdür.

Bu nedenle, her tür aynı zamanda bir sınıf (enum sabiti dahil), arabirim, ilkel veya dizidir.

İki farklı tür kategorisi vardır: ilkel türler ve başvuru türleri:

  • İlkel türdeki bir değişken her zaman aynı türden ilkel bir değeri tutar. Böyle bir değer, ancak o değişken üzerindeki atama işlemleri ile değiştirilebilir.
  • Başvuru türündeki bir değişken her zaman bir nesneye yapılan başvurunun değerini tutar. Diziler dahil tüm nesneler, sınıfın yöntemlerini destekler Object. Başvuru türleri, sınıf türleri (enum türleri dahil), arabirim türleri ve dizi türleridir.

Her veri parçasının, yapısını tanımlayan bir türü vardır, yani ne kadar bellek kaplar, nasıl düzenlenir ve daha da önemlisi, onunla nasıl etkileşim kurabilirsiniz.

İlkel türlere örnekler:

  1. int
  2. float
  3. char
  4. boolean

Sınıf türlerine örnekler:

  1. String
  2. Integer
  3. Boolean
  4. ArrayList
  5. StringBuilder

Arayüz türlerine örnekler:

  1. Collection
  2. List
  3. Map
  4. Serializable

Dizi türlerine örnekler:

  1. int[]
  2. String[]
  3. Integer[][][]

Temel olarak, değişken olarak adlandırabileceğiniz her şeyin bir türü vardır ve sınıflar da bir türdür.

Daha fazla bilgi burada: http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html


6
Dizileri unutma.
Paul Bellora

1
Düzenlemeyi kendim yapmayacağım çünkü yazmak istediğinden emin değilim, ancak sınıfların "bir tür" yerine "bir tür tür" olduğunu söylemek daha iyi olabilir .
2013

@ MichaelKjörling Evet, bunu söylemenin daha iyi bir yolu. Güncelleyeceğim.
Brandon

3
Boş türü unuttunuz (bkz. JLS 4.1).
user1803551

1
@AndyDong Soyut bir sınıf hala bir sınıftır.
Brandon

6

TLDR - Sınıf, Java'daki Türlerden biridir.

Not - Cevabı tam olarak anlamak için, Java'daki jenerikler hakkında küçük bir fikriniz olmalıdır.


Farkı anlamak için bize ilk anlayalım Tipi Java olduğunu.

Göre JLS SE 10 ,

İki türü vardır türleri : Java programlama dilinde ilkel türleri ( §4.2 ) ve referans türleri (§4.3).

İlkel Tür nedir?

a) İntegral türleri , değerleri sırasıyla 8 bit, 16 bit, 32 bit ve 64 bit işaretli ikinin tamamlayıcı tamsayı olan bayt, kısa, int ve uzun ve değerleri 16 bit olan char şeklindedir. UTF-16 kod birimlerini temsil eden işaretsiz tamsayılar (§3.1).

b) kayan nokta türleri şamandıra , değerleri, 32-bit, IEEE 754 kayan nokta sayıları arasında, ve, ikili , Değerleri 64 bit, IEEE 754 kayan nokta sayıları içerir.

c) Boole türünün tam olarak iki değeri vardır: true ve false.

Şimdi gelelim referans türü nedir?

Dört tür başvuru türü vardır: sınıf türleri ( §8.1 ), arabirim türleri ( §9.1 ), tür değişkenleri ( §4.4 ) ve dizi türleri ( §10.1 ).

Tek tek tartışalım.

JLS'de nasıl olduğunu görüyorsanız, Class şu şekilde tanımlanır:

Bir sınıf bildirimi , yeni bir adlandırılmış başvuru türünü belirtir.

İki tür sınıf bildirimi vardır: normal sınıf bildirimleri ve enum bildirimleri .

ClassDeclaration:
NormalClassDeclaration 
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody

Görüyorsunuz [TypeParameters], bu, sınıf türünün bu genel sınıfları da içerdiğini gösterir.

class Example<T>{

}

Sınıf türü çağrılacak Example

Kısacası, bir sınıf türü, numaralandırmalarımızı, Stringvb gibi normal (genel olmayan) sınıflarımızı ve genel sınıflarımızı da kapsar.

Benzer şekilde, umarım arayüz ve dizi türleri de açıktır. Dizi Türü derken beğenmek int[], String[]vb. Demek istiyoruz .

Son kısma gelelim - Tip değişkenleri. Onlar neler ?

Bir tür değişkeni, sınıf, arabirim, yöntem ve yapıcı gövdelerinde bir tür olarak kullanılan niteliksiz bir tanımlayıcıdır.

Aşağıdaki JLS'deki örnekle anlayalım.

class Test {
    <T extends C & I> void test(T t) {  
        t.mI();           // OK
        t.mCPublic();     // OK 
        t.mCProtected();  // OK 
        t.mCPackage();    // OK

    } 
}

Method parametresindeki nesnenizin türde olduğunu görüyorsunuz T. Evet, bu TTip değişkenidir ve referans olarak kullanılabilir / kullanılabilir. Evet öyle. (Bu garip örnek anlaşılamadı - Java'da genel yöntemin ne olduğunu öğrenin)

Bu cevabı tamamlıyor.


4

"Tür" daha kapsayıcı kategoridir. Java'daki değişkenlerin üç tür türü olabilir: int ve float gibi 8 "ilkel" tür, arabirimler ve sınıflar. Değerler (değişkenlerin aksine) ilkel veya sınıf örnekleri olabilir.


2

"Tür", 'ne tür veri olduğunu' tanımlar

Ör: "merhaba dünya" bir String -> "merhaba dünya" String tipidir (String int ..'den farklı olarak önceden ölçülen bir veri değildir, bu nedenle "merhaba dünya" bir string sınıfı türüdür diyebiliriz)

10, bir int -> 10, bir tamsayı veri türüdür.


5
Java'da Tamsayı! = İnt olduğundan bir int'i açıklamak için tamsayı kullanmaya dikkat edin.
nico_c
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.