Bisakah file java memiliki lebih dari satu kelas?


Jawaban:


128

Ya bisa. Namun, hanya boleh ada satu kelas tingkat atas publik per .javafile, dan kelas tingkat atas publik harus memiliki nama yang sama dengan file sumber.

Tujuan menyertakan beberapa kelas dalam satu file sumber adalah untuk menggabungkan fungsionalitas dukungan terkait (struktur data internal, kelas dukungan, dll) bersama dengan kelas publik utama. Perhatikan bahwa tidak masalah untuk tidak melakukan ini - satu-satunya efek adalah pada keterbacaan (atau tidak) kode Anda.


1
Saya pikir itu adalah ide yang baik untuk melakukannya jika Anda ingin menjaga kelas tambahan itu pribadi, sehingga mereka dapat sepenuhnya diubah nanti tanpa merusak apa pun di luar yang secara tidak sengaja menggunakan kelas-kelas itu.
Erich Kitzmueller

3
Ada di sana untuk kompatibilitas 1.0 (sebelum kelas bersarang). Itu adalah kesalahan besar dalam bahasa tersebut. Keuntungan terbesar untuk menggunakannya adalah IDE memiliki penanganan file yang sia-sia.
Tom Hawtin - tackline

25
Satu kelas publik tingkat atas per file. Bisa ada sebanyak mungkin kelas dalam publik per file yang Anda inginkan.
erickson

@ Tom, bagian mana yang menurut Anda merupakan kesalahan, kelas dalam atau beberapa kelas tingkat atas per file?
finnw

@finnw Beberapa kelas tingkat atas per file. Itu salah. Dimana java.awt.LightweightDispatcher?
Tom Hawtin - tackline

17

Jika Anda ingin mengimplementasikan kelas publik, Anda harus mengimplementasikannya dalam file dengan nama yang sama dengan kelas itu. Satu file dapat berisi satu publik dan secara opsional beberapa kelas privat. Ini berguna jika kelas hanya digunakan secara internal oleh kelas publik. Selain itu kelas publik juga dapat berisi kelas dalam.

Meskipun tidak masalah untuk memiliki satu atau lebih kelas privat dalam satu file sumber, saya akan mengatakan bahwa lebih mudah dibaca untuk menggunakan kelas dalam dan anonim sebagai gantinya. Misalnya seseorang dapat menggunakan kelas anonim untuk mendefinisikan kelas Pembanding di dalam kelas publik:

  public static Comparator MyComparator = new Comparator() {
    public int compare(Object obj, Object anotherObj) {

    }
  };

Kelas Comparator biasanya memerlukan file terpisah agar bisa publik. Dengan cara ini ia digabungkan dengan kelas yang menggunakannya.


1
Ini bukan kelas privat jika ada dalam file tanpa pengubah. Anda tidak dapat memiliki kelas privat tanpa kelas dalam karena jika Anda melakukannya, siapa yang dapat menggunakannya?
Bjorn

10

Ya, sebanyak yang Anda mau!

TAPI, hanya satu kelas "publik" di setiap file.


6

File .java disebut unit kompilasi. Setiap unit kompilasi dapat berisi sejumlah kelas dan antarmuka tingkat atas. Jika tidak ada tipe tingkat atas publik maka unit kompilasi dapat diberi nama apa saja.

//Multiple.java
//preceding package and import statements

class MyClass{...}
interface Service{...}
...
//No public classes or interfaces
...

Hanya ada satu kelas / antarmuka publik dalam unit kompilasi. Cu harus dinamai persis seperti jenis tingkat atas publik ini.

//Test.java
//named exactly as the public class Test
public class Test{...}
//!public class Operations{...}
interface Selector{...}
...
//Other non-public classes/interfaces

Poin penting tentang metode utama - bagian 1

Bagian 2

(Poin mengenai jumlah kelas dan tingkat akses mereka yang tercakup di bagian 2)


5

Ya, Anda dapat membuat lebih dari satu kelas publik, tetapi itu harus kelas bertingkat.

public class first {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    }

    public class demo1
    {

        public class demo2
        {

        }
    }
}

4

Selain kelas dalam anonim, penggunaan lain adalah kelas dalam pribadi yang mengimplementasikan antarmuka publik ( lihat artikel ini ). Kelas luar dapat mengakses semua bidang pribadi dan metode kelas dalam.

Ini memungkinkan Anda membuat dua kelas yang berpasangan erat, seperti model dan tampilannya, tanpa mengekspos implementasi keduanya. Contoh lain adalah koleksi dan iteratornya.


4

Secara umum, harus ada satu kelas per file. Jika Anda mengaturnya seperti itu, maka ketika Anda mencari kelas, Anda tahu Anda hanya perlu mencari file dengan nama itu.

Pengecualiannya adalah saat kelas paling baik diimplementasikan menggunakan satu atau lebih kelas pembantu kecil. Biasanya, kode paling mudah diikuti jika kelas-kelas tersebut ada di file yang sama. Misalnya, Anda mungkin memerlukan kelas pembungkus 'tuple' kecil untuk meneruskan beberapa data di antara panggilan metode. Contoh lainnya adalah kelas 'tugas' yang mengimplementasikan Runnable atau Callable. Mereka mungkin sangat kecil sehingga paling baik digabungkan dengan kelas induk yang membuat dan memanggil mereka.


4

Ya 200% ,

Contoh:

class A {
 void methodDeclaration() { System.out.println("!!!"); }
 }
 class B {
 public static void main(String[] args) {
new A().methodDeclaration();
    }
 }

2

Ya bisa, tetapi hanya ada 1 kelas publik di dalam paket apa pun karena kompiler java membuat file .Class yang memiliki nama yang sama dengan nama kelas Publik oleh karena itu jika mereka lebih dari 1 kelas publik akan sulit untuk dipilih kompiler yang seharusnya menjadi nama file Kelas.


1

Bervariasi ... Salah satu contohnya adalah kelas anonim (Anda akan menemukan banyak itu saat menggunakan pendengar acara dan semacamnya).


1

Saya pikir seharusnya "hanya boleh ada satu kelas publik tingkat atas NON-STATIC per file .java". Bukan?


Anda harus menanyakan ini sebagai pertanyaan daripada menjawab di sini.
Ashish Kumar

1

Jika Anda ingin mengimplementasikan singleton, yaitu kelas yang berjalan di program Anda dengan hanya satu instance di memori selama eksekusi aplikasi, maka salah satu cara untuk mengimplementasikan singleton adalah dengan menyarangkan kelas statis privat di dalam kelas publik . Kemudian kelas privat bagian dalam hanya membuat instance sendiri ketika metode publiknya untuk mengakses instance privat dipanggil.

Lihat artikel wiki ini,

https://en.wikipedia.org/wiki/Singleton_pattern

Konsep ini membutuhkan waktu untuk dipahami.


1

Dalam file .java, hanya ada satu kelas tingkat atas publik yang namanya sama dengan file tersebut, tetapi mungkin ada beberapa kelas dalam publik yang dapat diekspor ke semua orang dan mengakses bidang / metode kelas luar, misalnya : AlertDialog.Builder (dimodifikasi oleh 'public static') di AlertDialog (dimodifikasi oleh 'public')


1

Ya Anda dapat memiliki lebih dari satu Kelas dalam satu file .Java. Tapi Anda telah membuat salah satunya menjadi Publik. dan simpan file .java dengan nama yang sama dengan nama kelas publik. ketika Anda akan mengkompilasi file .java itu daripada Anda akan mendapatkan file .class terpisah untuk setiap kelas yang didefinisikan dalam file .java.

Selain itu, ada terlalu banyak metode untuk mendefinisikan lebih dari satu kelas dalam satu file .java.

  1. menggunakan konsep Inner Classes.
  2. Gunakan Konsep Kelas Anonim.

1

Iya ! File .java hanya dapat berisi satu kelas publik.

Jika Anda ingin kedua kelas ini menjadi publik, mereka harus diletakkan di dua file .java: A.java dan B.java.


2
Saya tidak yakin dari tanggapan Anda menambahkan apa-apa lagi dari 12 jawaban lainnya
goto

1

Ya, Anda dapat memiliki lebih dari satu kelas di dalam file .java. Paling-paling salah satu dari mereka bisa menjadi publik. Yang lainnya bersifat paket-pribadi. Mereka TIDAK BISA bersifat pribadi atau dilindungi. Jika salah satunya adalah publik, file tersebut harus memiliki nama kelas itu. Jika tidak, APA SAJA dapat diberikan ke file itu sebagai namanya.

Memiliki banyak kelas di dalam satu file berarti kelas-kelas tersebut berada dalam paket yang sama. Jadi kelas lain yang ada di dalam paket itu tetapi tidak di file itu juga bisa menggunakan kelas-kelas itu. Selain itu, ketika paket itu diimpor, kelas pengimpor juga dapat menggunakannya.

Untuk penyelidikan lebih rinci, Anda dapat mengunjungi posting blog saya di sini .


1
Selamat datang di Stack Overflow! Saya menghargai Anda menjelaskan informasi yang belum dibahas di sini. Anda juga berhasil mengutip entri blog Anda sambil menyatakan kepemilikan dan menyertakan informasi yang relevan di sini. Jika Anda memilih untuk berkontribusi lebih banyak ke situs ini di masa mendatang (dan saya harap Anda melakukannya), pastikan untuk mempertimbangkan artikel ini untuk memastikan posting Anda terus diterima dengan baik jika Anda mengutip blog Anda.
4castle

0

Hanya ada satu kelas publik tingkat atas dalam sebuah file. Nama kelas dari kelas publik itu haruslah nama file. Itu bisa memiliki banyak kelas batin publik.

Anda dapat memiliki banyak kelas dalam satu file. Batasan untuk berbagai tingkat visibilitas kelas dalam file adalah sebagai berikut:

Kelas tingkat atas:
1 kelas publik
0 kelas privat
sejumlah kelas default / dilindungi

Kelas dalam:
sejumlah kelas dalam dengan visibilitas apapun (default, privat, dilindungi, publik)

Tolong koreksi saya jika saya salah.


0

Ya bisa. Namun, hanya boleh ada satu kelas publik per file .java, karena kelas publik harus memiliki nama yang sama dengan file sumber.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.