Baru -baru ini, seorang teman mengatakan bahwa dia ingin mengatakan bahwa dia sedang belajar Java baru -baru ini. Dia masih tidak mengerti bahasa pemrograman yang berorientasi objek. Untuk membantunya "mengubah" lebih cepat, saya menulis artikel ini. Karena dari tingkat superstruktur. Ide-ide dari semua bahasa pemrograman yang berorientasi objek adalah serupa, dan ketiga karakteristik ini adalah pilar dalam pemikiran. Selanjutnya, saya akan fokus pada menjelaskan tiga karakteristik utama Java.
Bahasa pemrograman yang berorientasi objek memiliki tiga fitur utama: "enkapsulasi", "warisan", dan "polimorfisme".
Kemasan
Dalam pemrograman yang berorientasi pada objek, enkapsulasi (enkapsulasi) secara harfiah adalah arti pengemasan, yang berarti menggunakan tipe data abstrak untuk merangkum data dan operasi berbasis data bersama-sama, menjadikannya entitas independen yang tidak dapat dipisahkan. Bahkan, itu adalah merangkum metode dan data yang diperlukan agar objek dijalankan dalam program untuk mempublikasikan antarmuka. Data dilindungi di dalam tipe data abstrak, menyembunyikan detail internal sebanyak mungkin, dan hanya mempertahankan beberapa antarmuka eksternal untuk membuatnya menghubungi bagian luar. Dengan kata lain, pengguna tidak perlu mengetahui detail di dalam objek (tentu saja, tidak ada cara untuk mengetahuinya), tetapi objek dapat diakses melalui antarmuka yang disediakan oleh objek ke luar. Dalam istilah awam, objek lain yang melekat pada antarmuka ini tidak perlu peduli dengan implementasi objek untuk menggunakan objek ini. Konsepnya adalah "Jangan beri tahu saya bagaimana Anda melakukannya, lakukan saja."
Oleh karena itu, enkapsulasi memprivatisasi sifat -sifat suatu objek dan menyediakan beberapa metode atribut yang dapat diakses oleh dunia luar. Jika kita tidak ingin diakses oleh dunia luar, kita tidak harus memberikan metode untuk diakses oleh dunia luar. Tetapi jika suatu kelas tidak memberikan metode ke dunia luar untuk diakses, maka kelas ini tidak memiliki arti.
Sebagai contoh, kami menganggap objek sebagai rumah, dan wallpaper yang indah di dalamnya, seperti sofa, TV, AC, dll., Semua atribut pribadi rumah, tetapi jika tidak ada penutup dinding, maka tidak ada privasi sama sekali! Karena dinding pemblokiran kita tidak hanya dapat memiliki privasi kita sendiri tetapi juga mengubah dekorasi interior sesuka hati tanpa mempengaruhi orang lain. Tetapi jika tidak ada pintu dan jendela, apa arti kotak hitam yang dibungkus rapat? Oleh karena itu, orang lain juga dapat melihat pemandangan di dalam melalui pintu dan jendela. Oleh karena itu, pintu dan jendela adalah antarmuka yang ditinggalkan oleh objek rumah untuk diakses dunia luar.
Secara umum, pengubah pribadi harus ditambahkan sebelum atribut di kelas. Kemudian tentukan metode pengambil dan setter. Kemudian, objek dalam fungsi utama kami tidak dapat lagi memanggil properti secara langsung, dan hanya dapat dipanggil melalui metode Getter and Setter.
Tiga Manfaat Kemasan
1. Paket yang baik dapat mengurangi kopling.
2. Struktur di dalam kelas dapat dimodifikasi secara bebas.
3. Kontrol anggota yang lebih tepat dapat diberikan.
4. Sembunyikan informasi dan terapkan detail.
Pengubah
Pertama -tama, Anda perlu memahami apa itu pengubah. Pengubah akses dapat digunakan untuk memodifikasi ruang lingkup akses atribut dan metode.
Dalam proses yang berorientasi objek, kami menggunakan kontrol izin untuk menambahkan izin ke kelas yang dienkapsulasi untuk membatasi manipulasi kelas orang luar, sehingga dapat memastikan keamanan data dan metode di kelas. Dapat dikatakan bahwa kelas adalah entitas logis yang merangkum atribut dan metode terkait. Untuk properti atau metode tertentu dalam suatu objek, mereka dapat bersifat pribadi dan tidak dapat diakses oleh dunia luar. Ini juga dapat dibagikan dan dapat diakses oleh orang luar. Dengan cara ini, objek memberikan tingkat perlindungan yang berbeda untuk data internal untuk mencegah bagian program yang tidak terkait dengan tidak secara tidak sengaja mengubah atau menggunakan bagian pribadi dari objek secara tidak benar, menyebabkan kesalahan yang tidak perlu terjadi dalam program.
Pengubah di Jawa adalah publik, dilindungi, default, dan pribadi. Ini menunjukkan enkapsulasi yang berorientasi pada objek, dan kami harus mencoba yang terbaik untuk meminimalkan izin, sehingga dapat meningkatkan keamanan.
Seperti yang ditunjukkan pada gambar, ini mewakili ruang lingkup akses dari berbagai pengubah akses, seperti properti atau metode yang dimodifikasi oleh pribadi, yang hanya dapat diakses atau digunakan dalam kelas ini. Jika tidak ada pengubah yang ditambahkan, default default, dan dapat diakses dan digunakan secara default di kelas saat ini dan paket yang sama.
Akses Izin Kelas Bun Subkelas Paket Lainnya
publik ∨ ∨ ∨ ∨
Lindungi ∨ ∨ ∨ ×
default ∨ ∨ × × ×
Pribadi ∨ × × × ×
Jika tidak ada pengubah yang ditambahkan sebelum atribut, izin default adalah default. Kami dapat secara langsung memodifikasi nilai atribut dengan membuat objek, dan karakteristik enkapsulasi tidak tercermin. Ini tidak aman dalam pemrograman, jadi kita perlu menggunakan enkapsulasi untuk meningkatkan kode kita.
Contoh pengubah
Pertama, kami mendefinisikan empat kelas orang, orang tua, guru, siswa, dan membandingkan perbedaan antara paket lain, subkelas, paket, dan kelas ini. Diagram lokasi setiap kelas ditampilkan.
paket com.java.test; orang kelas publik {public string name = "zhang san"; public void pendahulanganeFyelf () {System.out.println (name); }}Namanya publik. Jika tidak ada kesalahan dalam kompilasi, itu berarti bahwa variabel publik memiliki akses ke kelas ini.
paket com.java.test; siswa kelas publik {person p = orang baru (); public void test () {System.out.println (p.uname); }}Siswa dan orang berada dalam paket yang sama. Jika tidak ada kesalahan dalam kompilasi, itu berarti bahwa variabel memiliki hak akses dalam paket yang sama.
Paket com.java.test1; impor com.java.test.person; guru kelas publik memperluas orang {public int age; Orang p = orang baru (); public void test1 () {System.out.println (p.uname); }}Siswa dan orang tidak berada dalam paket yang sama, tetapi guru mewarisi kelas orang tersebut. Jika tidak ada kesalahan dalam kompilasi, itu berarti bahwa variabel memiliki hak akses di subpackage.
Paket com.java.test1; import com.java.test.person; orang tua kelas publik {public string uname = "haha"; Orang p = orang baru (); public void test2 () {System.out.println (p.uname); }}Orang tua dan orang tidak dalam paket yang sama. Jika tidak ada kesalahan dalam kompilasi, itu berarti bahwa variabel tidak memiliki izin akses.
Setelah tes di atas, jika semuanya dapat dikompilasi dan disahkan, itu berarti bahwa kelas yang dimodifikasi dengan publik dapat saling mengakses di kelas ini, paket yang sama, subkelas, dan paket lainnya.
Kami juga mulai menguji masalah izin yang dilindungi. Jika orang, guru, dan siswa dapat mengkompilasi dan lulus, itu berarti bahwa kelas yang dimodifikasi dengan terlindungi dapat mengakses satu sama lain di kelas ini, paket yang sama, dan subclass. Jika orang tua tidak menyusun dan tidak lewat, itu berarti bahwa dilindungi tidak dapat mengakses satu sama lain di kelas tanpa hubungan warisan di luar paket.
Mulailah juga menguji masalah izin default. Jika orang dan siswa dapat mengkompilasi dan lulus, itu berarti bahwa kelas yang dimodifikasi dengan default dapat mengakses satu sama lain di kelas ini, paket yang sama, dan subclass. Orang tua dan guru menyusun tanpa melewati kelas orang tua dan guru tidak dapat mengakses satu sama lain terlepas dari apakah ada hubungan warisan.
Kami juga mulai menguji masalah izin pribadi. Jika orang dapat dikompilasi dan disahkan, itu berarti bahwa kelas yang dimodifikasi dengan pribadi dapat mengakses satu sama lain di kelas ini, paket yang sama, dan subclass. Orang tua, guru, dan siswa tidak dapat menyusun tanpa melewati pribadi untuk menunjukkan bahwa kelas yang dimodifikasi dengan pribadi hanya dapat diakses di kelas ini.
Secara umum, pengubah pribadi harus ditambahkan sebelum atribut di kelas. Kemudian tentukan metode pengambil dan setter. Kemudian, objek dalam fungsi utama kami tidak dapat lagi memanggil properti secara langsung, dan hanya dapat dipanggil melalui metode Getter and Setter.
Tas
Izinkan saya memberi tahu Anda fungsi tasnya
Kadang -kadang ketika Anda menemukan nama kelas program dapat digandakan, kami dapat menggunakan konsep paket untuk menyelesaikan masalah kami. Tujuan dari paket ini adalah untuk mengelola file java dan menyelesaikan konflik file dengan nama yang sama. Ini mirip dengan lemari pakaian. Apakah kita memiliki partisi dan laci yang berbeda di lemari pakaian? Kami menempatkan pakaian secara terpisah dalam berbagai kategori, yang lebih kondusif untuk manajemen kami.
Untuk menentukan paket, kami menggunakan kata kunci paket, ditambah nama paket kami.
Paket com.java.test; // Catatan: Itu harus ditempatkan di baris pertama program sumber, dan nama paket dapat dipisahkan oleh "." tanda. Spesifikasi penamaan paket dieja dengan semua huruf kecil.
Paket yang umum digunakan dalam sistem java
Java. (Fungsi). (Kelas) Java.lang. (Kelas) berisi dasar -dasar bahasa Java Java.util. (Kelas) berisi berbagai kelas alat dalam bahasa Java.io (kelas) berisi kelas input dan output yang terkait output
Untuk menggunakan kelas di file lain dalam paket yang berbeda, Anda perlu menggunakan kata kunci impor. Misalnya, impor com.java.test1.test.java. Pada saat yang sama, jika impor com.java.test1*, impor semua file di bawah paket.
kata kunci ini
1. Ada tiga aplikasi utama dari kata kunci ini:
(1) ini memanggil atribut di kelas ini, yaitu variabel anggota di kelas;
(2) ini memanggil metode lain di kelas ini;
(3) Ini memanggil konstruktor lain di kelas ini, dan harus ditempatkan di baris pertama konstruktor saat menelepon.
Siswa Public Class {Public Student (nama string) {// Tentukan konstruktor dengan parameter formal} public student () {// Tentukan metode, namanya sama dengan kelas, jadi itu adalah konstruktor ini ("Halo!"); } Nama string; // Tentukan nama variabel anggota private void setName (nama string) {// tentukan parameter (variabel lokal) Nama this.name = name; // Lewati nilai variabel lokal ke variabel anggota}}Seperti pada kode di atas, ada nama variabel anggota, dan ada parameter formal dalam metode ini, dan namanya juga nama. Maka nilai nama parameter formal diteruskan ke nama variabel anggota dalam metode.
Kata kunci ini mewakili variabel atau metode anggota dalam objek. Dengan kata lain, jika suatu variabel ditambahkan dengan kata kunci ini, itu mengacu pada variabel anggota atau metode objek, daripada parameter formal atau variabel lokal dari metode anggota. Untuk alasan ini, dalam kode di atas, this.name mewakili variabel anggota dalam objek, juga dikenal sebagai properti objek, dan nama yang diikuti adalah parameter formal dari metode ini. Kode this.name = nama adalah untuk meneruskan nilai parameter formal ke variabel anggota.
Jika ada beberapa konstruktor di kelas karena nama mereka sama dan sama dengan nama kelas, lalu konstruktor mana yang disebut ini? Bahkan, ini sama dengan menggunakan metode lain untuk merujuk pada konstruktor, dan mereka dipanggil melalui parameter formal. Seperti pada contoh di atas, jika parameter ditambahkan setelah kata kunci ini, itu berarti bahwa ia mengacu pada konstruktor dengan parameter. Jika sekarang ada tiga metode konstruksi, yaitu, tidak ada parameter, satu parameter, dan dua parameter. Kemudian kompiler Java akan menentukan konstruktor mana yang akan dihubungi berdasarkan jumlah parameter yang diteruskan. Seperti dapat dilihat dari contoh di atas, kata kunci ini dapat digunakan tidak hanya untuk merujuk variabel anggota, tetapi juga untuk konstruktor referensi.
Kelas internal
Kelas dalam sangat mudah dimengerti dari luar. Kelas internal adalah menempatkan definisi satu kelas di dalam definisi kelas lain. Tentu saja, sesuai dengan ini, kelas yang berisi kelas dalam disebut kelas luar.
Banyak pemula pasti akan bertanya mengapa satu kelas harus didefinisikan di kelas lain?
Terkadang ada beberapa masalah dalam pemrograman kami yang sulit dipecahkan menggunakan antarmuka. Pada saat ini, kita dapat menggunakan kemampuan yang disediakan oleh kelas internal untuk mewarisi beberapa kelas konkret atau abstrak untuk menyelesaikan masalah pemrograman ini. Dapat dikatakan bahwa antarmuka hanya memecahkan beberapa masalah, sementara kelas internal membuat solusi warisan berganda lebih lengkap.
Ada kalimat dalam "Think in Java": alasan paling menarik untuk menggunakan kelas dalam adalah bahwa setiap kelas dalam dapat secara independen mewarisi implementasi (antarmuka) secara independen, jadi apakah kelas periferal telah mewarisi implementasi tertentu (antarmuka) tidak berpengaruh pada kelas dalam.
Antarmuka Publik Ayah {} Antarmuka Publik Ibu {} Kelas Publik Implementasikan Ayah, Ibu {} Putri kelas publik mengimplementasikan ayah {class mother_ mengimplementasikan ibu {}}Fitur kelas internal
1. Kelas internal dapat menggunakan banyak contoh, setiap contoh memiliki informasi statusnya sendiri dan tidak tergantung pada informasi objek periferal lainnya.
2. Dalam satu kelas periferal, beberapa kelas dalam dapat menerapkan antarmuka yang sama dengan cara yang berbeda, atau mewarisi kelas yang sama.
3. Momen saat membuat objek kelas internal tidak tergantung pada pembuatan objek kelas periferal.
4. Tidak ada hubungan "is-a" yang membingungkan di kelas internal, itu adalah entitas yang independen.
5. Kelas dalam memberikan enkapsulasi yang lebih baik, dan kelas lain tidak dapat diakses kecuali untuk kelas periferal.
paket com.java.test; kelas publik OutClass {name string privat; usia int pribadi; public string getName () {return name; } public void setName (name string) {this.name = name; } public int getage () {usia kembali; } public void setage (int usia) {this.age = usia; } public void display () {System.out.println ("Tampilan OutClass disebut"); } kelas publik innerclass {public innerclass () {name = "chenssy"; usia = 23; } public outerclass getouterClass () {return OutterClass.tip; } public void display () {System.out.println ("Nama:" + getName () + "; usia:" + getage ()); }} public static void main (string [] args) {Outerclass Outerclass = new OuterClass (); Outerclass.innerclass innerclass = outerclass.new innerclass (); innerclass.display (); innerclass.getouterclass (). display (); }} Nama: chenssy; usia: 23Tampilan OutClass dipanggil
Kita perlu lebih jelas bahwa kelas internal adalah konsep waktu kompilasi. Setelah disusun dengan sukses, mereka termasuk dua kelas yang sama sekali berbeda dari kelas periferal (tentu saja mereka masih terkait).
Kami juga melihat cara merujuk kelas dalam: mengacu pada kelas dalam, kami perlu menentukan jenis objek ini: outerclasname.innerclassname. Pada saat yang sama, jika kita perlu membuat objek kelas dalam, kita harus menggunakan objek kelas eksternal untuk membuat kelas dalam melalui .new: outerclass.innerclass innerclass = Outerclass.new innerclass ();.
Pada saat yang sama, jika kita perlu menghasilkan referensi ke objek kelas eksternal, kita dapat menggunakan outerclassname.ini, sehingga kita dapat menghasilkan referensi ke kelas eksternal dengan benar.
Di Java, kelas internal terutama dibagi menjadi kelas internal anggota, kelas internal lokal, kelas internal anonim, dan kelas internal statis.
Kelas internal anggota
Kelas internal anggota juga merupakan kelas internal yang paling umum. Ini adalah anggota kelas periferal, sehingga dapat mengakses semua atribut anggota dan metode kelas periferal tanpa batasan. Meskipun bersifat pribadi, jika kelas periferal ingin mengakses atribut anggota dan metode kelas internal, ia perlu mengakses melalui instance kelas internal.
Dua poin harus diperhatikan di kelas internal anggota.
Tidak mungkin ada variabel dan metode statis di kelas internal anggota;
Kelas internal anggota dilampirkan pada kelas periferal, sehingga kelas internal hanya dapat dibuat jika kelas periferal dibuat terlebih dahulu.
kelas publik OutClass {private string str; public void outerDisplay () {System.out.println ("OuterClass ..."); } kelas publik InnerClass {public void innerdisplay () {// Gunakan atribut STR di periferal str = "chenssy ..."; System.out.println (str); // Gunakan metode outerDisplay (); }} /*Disarankan untuk menggunakan getxxx () untuk mendapatkan kelas internal anggota, terutama ketika konstruktor kelas dalam tidak memiliki parameter* / public innerclass getInnerClass () {return new InnerClass (); } public static void main (string [] args) {Outerclass Outer = new Outerclass (); Outerclass.innerclass inner = outer.getInnerClass (); inner.innerdisplay (); }}Saya pribadi merekomendasikan menggunakan getxxx () untuk mendapatkan kelas internal anggota, terutama ketika konstruktor kelas internal ini tidak memiliki parameter.
Kalimat Kelas Internal Lokal
Kelas internal lokal bersarang dalam metode dan lingkup. Penggunaan kelas ini terutama untuk menerapkan dan memecahkan masalah yang relatif kompleks. Saya ingin membuat kelas untuk membantu solusi kami. Pada saat itu, saya tidak ingin kelas ini menjadi publik, sehingga kami dapat membuat kelas internal lokal.
Kelas dalam lokal disusun seperti kelas batin anggota. Mereka hanya dapat digunakan dalam metode dan atribut ini. Jika mereka tidak dalam metode dan atribut ini, mereka akan tidak valid.
Didefinisikan dalam metode ini:
Public Class Parcel5 {Destination Destination Public (String str) {class Pdestionation mengimplementasikan DESION {private String label; private pDestion (string whereto) {label = whereto; } public String readLabel () {return label; }} return new Pdestion (str); } public static void main (string [] args) {Parcel5 Parcel5 = new Parcel5 (); DESTIONE D = Parcel5.destionation ("Chenssy"); }}Didefinisikan dalam ruang lingkup:
Public Class Parcel6 {private void internalTracking (boolean b) {if (b) {class trackingslip {private string id; Trackingslip (string s) {id = s; } String getSlip () {return id; }} Trackingslip ts = trackingslip baru ("chenssy"); String string = ts.getSlip (); }} public void track () {internalTracking (true); } public static void main (string [] args) {parcel6 parcel6 = new Parcel6 (); parcel6.track (); }}Kelas internal anonim
kelas publik outerclass {public innerclass getInnerClass (final int num, string str2) {return new innerclass () {int number = num + 3; public int getNumber () {nomor kembali; }}; / * CATATAN: titik koma tidak dapat menyimpan */} public static void main (string [] args) {OUTERClass out = new OuterClass (); InnerClass Inner = out.getInnerClass (2, "Chenssy"); System.out.println (inner.getNumber ()); }} antarmuka innerclass {int getNumber ();}1. Kelas internal anonim tidak memiliki pengubah akses.
2. Kelas internal anonim baru, kelas ini harus ada terlebih dahulu. Jika kami mengomentari antarmuka InnerClass itu, kesalahan kompilasi akan terjadi.
3. Perhatikan parameter formal dari metode getInnerClass (). Parameter formal pertama dimodifikasi dengan final, sedangkan yang kedua tidak. Pada saat yang sama, kami juga menemukan bahwa parameter formal kedua belum digunakan di kelas dalam anonim, jadi ketika parameter formal metode perlu digunakan oleh kelas dalam anonim, maka parameter formal ini harus final.
4. Tidak ada konstruktor untuk kelas internal anonim. Karena bahkan tidak memiliki nama untuk membangunnya.
Kelas Dalam Statis
Static dapat memodifikasi variabel anggota, metode, blok kode, dan kelas internal lainnya. Kami menyebut kelas batin dimodifikasi dengan statis sebagai statis, tetapi kami lebih suka menyebutnya kelas internal bersarang. Perbedaan terbesar antara kelas dalam statis dan kelas dalam non-statis adalah bahwa setelah kompilasi selesai, referensi akan disembunyikan, dan penggunaannya akan menunjuk ke pinggirannya. Tetapi kelas dalam statis tidak, yang berarti bahwa penciptaan kelas dalam statis tidak perlu bergantung pada kelas periferal, dan tidak dapat menggunakan variabel anggota non-statis dan metode kelas periferal apa pun.
kelas publik OutClass {private string sex; name string statis publik = "chenssy"; / ***Kelas dalam statis*/ kelas statis InnerClass1 {/*anggota statis dapat ada di kelas dalam statis*/ string statis publik _name1 = "chenssy_static"; public void display () { /** kelas dalam statis hanya dapat mengakses variabel anggota statis dan metode kelas periferal* tidak dapat mengakses variabel anggota non-statis dan metode kelas periferal* / system.out.println ("nama outclass:" + nama); }} / *** Kelas dalam non-statis* / kelas InnerClass2 { /* anggota statis tidak dapat ada di kelas dalam non-statis* / public string _name2 = "chenssy_inner"; / * Setiap anggota kelas periferal dapat dipanggil di kelas dalam non-statis, baik statis atau non-statis */ public void display () {System.out.println ("OutterClass Name:" + Name); }} /** * @desc metode kelas periferal * @author chenssy * @data 2013-10-25 * @return void * /public void display () { / * kelas periferal mengakses kelas dalam statis: kelas dalam. */ System.out.println (InnerClass1._name1); /* Kelas dalam statis dapat dibuat secara langsung tanpa mengandalkan kelas periferal*/ new InnerClass1 (). Display (); /* Penciptaan batin non-statis perlu mengandalkan kelas periferal*/ outerclass.innerclass2 inner2 = new Outerclass (). New InnerClass2 (); /* Anggota kelas dalam non-statis perlu menggunakan contoh kelas dalam non-statis*/ system.out.println (inner2._name2); inner2.display (); } public static void main (string [] args) {Outerclass Outer = new Outerclass (); outer.display (); }}Meringkaskan
Di atas adalah ringkasan dari tiga fitur Java utama - pengetahuan yang dikotori yang diperkenalkan oleh editor kepada Anda. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!