Perbedaan antara kelas dan tipe

105

Karena baru mengenal Java, saya bingung antara konsep class dan type . Misalnya, haruskah objek tersebut "Hello World!"termasuk dalam tipe String atau kelas String ? Atau mungkin keduanya?

pengguna2236096
sumber
24
Akhir-akhir ini tampaknya ada kecenderungan untuk tidak menyukai pertanyaan bergaya "pemula" apakah itu bagus atau tidak. Ini menjengkelkan, untuk sedikitnya.
nico_c
9
Juga untuk merendahkan setiap pertanyaan yang pemilih tidak mengerti ...
Marquis dari Lorne
4
Saya setuju bahwa tidak sopan untuk memberi suara negatif saat Anda mengatakan pertanyaan pemula, tetapi apakah itu baik atau buruk, semua pertanyaan pemula memiliki jawabannya hanya dengan mencari di web. Masalah dan alasan orang-orang downvoting adalah karena hal ini menyebabkan stack overflow :)
Marko Lazić
13
Ini adalah pertanyaan yang bagus - dan 3 suara untuk ditutup adalah mengapa kami harus dapat memberikan suara untuk tetap terbuka . Saya masih ingat ketika saya belajar Java bahwa jargon OO adalah penghalang terbesar.
Lawrence Dol
4
@nickecarlo Dulu ada satu poin di FAQ, yang tampaknya dihapus sekitar setahun terakhir - "pertanyaan menunjukkan kurangnya penelitian yang serius dan tidak menunjukkan tanda-tanda upaya yang dilakukan untuk menyelesaikannya sebelum mengajukan pertanyaan ". Saya merasa menjengkelkan bahwa ada BANYAK pertanyaan omong kosong yang dapat diselesaikan oleh Google, alih-alih orang-orang di sini benar-benar membuang-buang waktu mereka untuk menjelaskan "pemrograman 101" kepada orang lain.
TC1

Jawaban:

123

Kelas adalah tipe. Antarmuka adalah tipe. Primitif adalah tipe. Array adalah tipe.

Oleh karena itu, setiap tipe juga bisa berupa kelas (termasuk konstanta enum), antarmuka, primitif, atau larik.

Ada dua kategori tipe yang berbeda: tipe primitif dan tipe referensi:

  • Variabel tipe primitif selalu memiliki nilai primitif dari tipe yang sama. Nilai seperti itu hanya dapat diubah dengan operasi penugasan pada variabel itu.
  • Variabel tipe referensi selalu menyimpan nilai referensi ke suatu objek. Semua objek, termasuk array, mendukung metode kelas Object. Jenis referensi adalah jenis kelas (termasuk jenis enum), jenis antarmuka, dan jenis array.

Setiap bagian data memiliki tipe yang menentukan strukturnya, yaitu berapa banyak memori yang digunakan, bagaimana penataannya, dan yang lebih penting, bagaimana Anda dapat berinteraksi dengannya.

Contoh tipe primitif:

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

Contoh tipe kelas:

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

Contoh jenis antarmuka:

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

Contoh tipe array:

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

Pada dasarnya, apa pun yang bisa Anda rujuk sebagai variabel memiliki tipe, dan kelas adalah sejenis tipe.

Info lebih lanjut di sini: http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html

Brandon
sumber
6
Jangan lupakan array.
Paul Bellora
1
Saya tidak akan mengedit sendiri karena saya tidak yakin itu yang ingin Anda tulis, tetapi mungkin lebih baik jika Anda mengatakan bahwa kelas adalah "sejenis tipe" daripada "sejenis tipe".
CVn
@ MichaelKjörling Ya, itu cara yang lebih baik untuk mengatakannya. Saya akan memperbaruinya.
Brandon
3
Anda lupa tipe null (lihat JLS 4.1).
pengguna1803551
1
@AndyDong Kelas abstrak tetaplah sebuah kelas.
Brandon
6

TLDR - Kelas adalah salah satu Jenis di Jawa.

Catatan - Untuk memahami jawabannya, Anda harus memiliki sedikit ide tentang obat generik di Java.


Untuk memahami perbedaannya mari kita terlebih dahulu memahami apa itu Type di Java.

Menurut JLS SE 10 ,

Ada dua jenis tipe dalam bahasa pemrograman Java: tipe primitif ( §4.2 ) dan tipe referensi (§4.3).

Apa itu Tipe Primitif?

a) Tipe integral adalah byte, short, int, dan long , yang nilainya masing-masing 8-bit, 16-bit, 32-bit dan 64-bit, dua komplemen, dan char, yang nilainya 16-bit integer tak bertanda tangan yang mewakili unit kode UTF-16 (§3.1).

b) Tipe floating-point adalah float , yang nilainya mencakup angka floating-point IEEE 754 32-bit, dan double , yang nilainya mencakup angka floating-point IEEE 754 64-bit.

c) Tipe boolean memiliki tepat dua nilai: benar dan salah.

Sekarang, mari kita bahas apa itu tipe referensi?

Ada empat macam jenis referensi: jenis kelas ( §8.1 ), jenis antarmuka ( §9.1 ), jenis variabel ( §4.4 ), dan jenis array yang ( §10.1 ).

Yuk kita bahas satu persatu.

Jika Anda melihat caranya di JLS, Kelas didefinisikan seperti ini:

Sebuah deklarasi kelas menetapkan bernama tipe referensi baru.

Ada dua jenis deklarasi kelas: deklarasi kelas normal dan deklarasi enum .

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

Anda lihat [TypeParameters], ini menunjukkan bahwa tipe kelas menyertakan kelas-kelas generik itu juga.

class Example<T>{

}

Jenis kelas akan dipanggil Example

Singkatnya, tipe kelas mencakup enum kami, kelas reguler (non generik) kami seperti Stringdll dan juga kelas generik kami.

Demikian pula, saya berharap antarmuka dan jenis array juga jelas. Yang kami maksud dengan Jenis array adalah suka int[], String[]dll.

Mari kita sampai pada bagian terakhir - Jenis variabel. Apakah mereka ?

Variabel tipe adalah pengenal yang tidak memenuhi syarat yang digunakan sebagai tipe dalam kelas, antarmuka, metode, dan badan konstruktor.

Mari kita pahami dengan contoh di JLS di bawahnya.

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

    } 
}

Anda melihat bahwa objek Anda di parameter metode berjenis T. Ya, ini Tadalah variabel Jenis dan dapat / dapat digunakan sebagai referensi. Ya itu. (Tidak dapat memahami contoh aneh ini - Pelajari apa itu metode generik di Java)

Ini melengkapi jawabannya.

Nomor 945
sumber
4

"Jenis" adalah kategori yang lebih inklusif. Variabel di Java dapat memiliki tiga jenis tipe: 8 tipe "primitif" seperti int dan float, antarmuka, dan kelas. Nilai (sebagai lawan variabel) bisa primitif atau instance kelas.

Lee Daniel Crocker
sumber
2

"Type" mendefinisikan 'jenis datanya'

Contoh: "hello world" adalah String -> "hello world" adalah tipe String (String bukan data premetif tidak seperti int .. jadi kita bisa mengatakan "hello world" adalah tipe kelas string)

10 adalah int -> 10 adalah tipe data integer.

Satya
sumber
5
Hati-hati dengan menggunakan integer untuk menjelaskan int karena Integer! = Int di Java.
nico_c