JavaRush /Blog Jawa /Random-JV /Akses modifiers. Pribadi, dilindhungi, standar, umum

Akses modifiers. Pribadi, dilindhungi, standar, umum

Diterbitake ing grup
Hello! Ing kuliah saiki, kita bakal kenal karo konsep " pengubah akses " lan ndeleng conto nggarap. Akses modifiers.  Pribadi, dilindhungi, standar, umum - 1Sanajan tembung "ayo kenalan" ora bakal bener: sampeyan wis kenal karo akeh saka ceramah sadurunge. Mung ing kasus, ayo refresh memori kita bab utama. Modifiers akses paling asring tembung kunci sing ngatur tingkat akses menyang macem-macem bagean kode sampeyan. Kenapa "paling sering"? Amarga salah siji saka wong-wong mau wis disetel minangka standar lan ora dituduhake dening tembung kunci :) Ana total papat akses modifiers ing Jawa. Kita dhaptar kanthi urutan saka sing paling ketat nganti sing paling "alus":
  • pribadi;
  • dilindhungi;
  • standar (paket katon);
  • umum.
Ayo deleng saben wong, mutusake kapan bisa migunani kanggo kita lan menehi conto :)

Modifier pribadi

Akses modifiers.  Pribadi, dilindhungi, standar, umum - 2Private- modifier akses paling mbatesi. Iki matesi visibilitas data lan metode ing kelas siji. Sampeyan ngerti modifier iki saka kuliah babagan getter lan setter. Apa sampeyan kelingan conto iki?
public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }
}

public class Main {

   public static void main(String[] args) {

       Cat cat = new Cat();
       cat.name = "";
       cat.age = -1000;
       cat.weight = 0;
   }
}
Kita ndeleng ing salah sawijining artikel sadurunge. Ing kene kita nggawe kesalahan serius: kita mbukak data kita, minangka asil saka programer liyane duwe akses langsung menyang lapangan kelas lan ngganti nilai. Kajaba iku, nilai kasebut ditugasake tanpa mriksa, minangka asil ing program kita bisa nggawe kucing kanthi umur -1000 taun, jeneng "" lan bobote 0. Kanggo ngatasi masalah iki, kita digunakake getter lan setter , lan uga winates akses menyang data nggunakake modifier a private.
public class Cat {

   private String name;
   private int age;
   private int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       // checking the input parameter
       this.name = name;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       // checking the input parameter
       this.age = age;
   }

   public int getWeight() {
       return weight;
   }

   public void setWeight(int weight) {
       // checking the input parameter
       this.weight = weight;
   }
}
Bener, mbatesi akses menyang lapangan lan ngetrapake getter-setters minangka conto sing paling umum digunakake privateing karya nyata. Tegese, ngleksanakake enkapsulasi ing program minangka tujuan utama modifier iki. Iki ditrapake ora mung kanggo lapangan, kanthi cara. Mbayangno yen ing program sampeyan ana cara sing ngetrapake sawetara fungsi sing VERY Komplek. Kanggo teka munggah karo iki minangka conto ... Ayo dadi ngomong cara sampeyan readDataFromCollider()njupuk alamat karo data minangka input, maca data saka Gedhe Hadron Collider ing format byte, Ngonversi data iki menyang teks, nulis menyang file lan prints. Malah deskripsi metode kasebut katon serem, apamaneh kode kasebut :) Kanggo nambah keterbacaan kode kasebut, luwih becik ora nulis logika metode rumit ing sak panggonan, nanging, sebaliknya, ngilangi fungsi kasebut dadi cara sing kapisah. . Contone, metode kasebut readByteData()tanggung jawab kanggo maca data, convertBytesToSymbols()ngowahi data sing diwaca saka collider dadi teks, saveToFile()nyimpen teks sing diasilake menyang file, lan printColliderData()nyithak file data kita. Cara kasebut readDataFromCollider()bakal dadi luwih gampang:
public class ColliderUtil {

   public void readDataFromCollider(Path pathToData) {
       byte[] colliderData = readByteData(pathToData);
       String[] textData = convertBytesToSymbols(colliderData);
       File fileWithData = saveToFile(textData);
       printColliderData(fileWithData);
   }

   public byte[] readByteData(Path pathToData) {

       // reads data in bytes
   }

   public String[] convertBytesToSymbols(byte[] colliderDataInBytes) {

       // convert bytes to characters
   }

   public File saveToFile(String[] colliderData) {

       // save the read data to a file
   }

   public void printColliderData(File fileWithColliderData) {

       // print data from file
   }
}
Nanging, nalika sampeyan ngelingi saka kuliah ing antarmuka, pangguna mung entuk akses menyang antarmuka pungkasan. Lan 4 cara kita dudu bagean kasebut. Iku tambahan : kita digawe kanggo nambah maca kode lan supaya cramming papat tugas beda dadi siji cara. Ora perlu menehi akses pangguna menyang metode kasebut. Yen pangguna duwe akses menyang metode kasebut nalika nggarap collider convertBytesToSymbols(), mesthine dheweke ora ngerti apa metode iki lan kenapa dibutuhake. Apa bita sing diowahi? Saka ngendi asale? Napa ngowahi dadi teks? Logika sing lumaku ing cara iki dudu bagéan saka antarmuka panganggo. Mung cara readDataFromCollider()minangka bagéan saka antarmuka. Apa sing kudu ditindakake kanthi papat metode "internal" iki? Bener! Watesi akses menyang wong-wong mau nganggo modifier private. Kanthi cara iki, dheweke bisa kanthi gampang nindakake pakaryan ing kelas lan ora mbingungake pangguna, sing ora mbutuhake logika saben wong kanthi kapisah.
public class ColliderUtil {

   public void readDataFromCollider(Path pathToData) {
       byte[] colliderData = readByteData(pathToData);
       String[] textData = convertBytesToSymbols(colliderData);
       File fileWithData = saveToFile(textData);
       printColliderData(fileWithData);
   }

   private byte[] readByteData(Path pathToData) {
       // reads data in bytes
   }

   private String[] convertBytesToSymbols(byte[] colliderDataInBytes) {
       // convert bytes to characters
   }

   private File saveToFile(String[] colliderData) {
       // save the read data to a file
   }

   private void printColliderData(File fileWithColliderData) {
       // print data from file
   }
}

Modifier dilindhungi

Modifier akses paling mbatesi sabanjure yaiku protected. Akses modifiers.  Pribadi, dilindhungi, standar, umum - 3 Kolom lan metode sing ditunjuk karo modifier akses protectedbakal katon:
  • ing kabeh kelas sing ana ing paket sing padha karo kita;
  • ing kabeh kelas penerus saka kelas kita.
Iku langsung angel mbayangno yen iki perlu. Aja kaget: protectedana kasus aplikasi sing luwih sithik tinimbang private, lan spesifik. Mbayangno yen kita duwe kelas abstrak AbstractSecretAgentsing nuduhake agen rahasia saka sawetara layanan khusus, uga paket top_secretsing ngemot kelas iki lan turunane. Kelas konkrit - FBISecretAgent, MI6SecretAgent, MossadSecretAgentlan liya-liyane - diwarisake saka iku. Ing kelas abstrak kita pengin ngleksanakake counter agen. Nalika obyek agen anyar digawe nang endi wae ing program, iku bakal nambah.
package top_secret;

public abstract class AbstractSecretAgent {

   public static int agentCount = 0;
}
Nanging agen kita rahasia! Iki tegese mung dheweke lan ora ana wong liya sing ngerti babagan nomer kasebut. Kita bisa kanthi gampang nambah modifier protectedkanggo lapangan agentCount, lan banjur salah siji obyek saka kelas agen rahasia liyane, utawa kelas sing dumunung ing paket "rahasia", bisa entuk regane top_secret.
public abstract class AbstractSecretAgent {

   protected static int agentCount = 0;
}
Kanggo tugas tartamtu sing dibutuhake modifier protected:)

paket katon modifier

Sabanjure ing dhaptar kita yaiku modifier defaultutawa, kaya sing diarani package visible,. Ora dituduhake karo tembung kunci amarga wis disetel kanthi standar ing Jawa kanggo kabeh kolom lan metode. Yen sampeyan nulis ing kode sampeyan -
int x = 10;
... variabel xbakal duwe akses sing padha package visible. Yen cara (utawa variabel) ora ditandhani karo modifier sembarang, iku dianggep ditandhani karo "default modifier". Variabel utawa cara kanthi modifier kasebut (yaiku tanpa ana) katon ing kabeh kelas paket sing diumumake. Lan mung kanggo wong-wong mau. Panganggone diwatesi, kaya modifier protected. Paling asring, default-akses digunakake ing paket ngendi ana sawetara kelas sarana sing ora ngleksanakake fungsi kabeh kelas liyane ing paket iki. Ayo menehi conto. Mbayangno kita duwe paket " layanan ". Ing njero ana macem-macem kelas sing bisa digunakake karo database. Contone, ana kelas UserServicesing maca data pangguna saka database, kelas CarServicesing maca data babagan mobil saka database padha, lan kelas liyane, saben kang dianggo karo jinis obyek dhewe lan maca data bab mau saka database.
package services;

public class UserService {
}

package services;

public class CarService {
}
Nanging, kahanan bisa gampang kedadeyan nalika data ing database ana ing siji format, nanging kita butuh ing liyane. Bayangake manawa tanggal lair pangguna ing database disimpen ing format TIMESTAMP WITH TIME ZONE...
2014-04-04 20:32:59.390583+02
... tinimbang kudu obyek sing paling gampang - java.util.Date. Kanggo tujuan iki, kita bisa nggawe serviceskelas khusus ing paket kasebut Mapper. Dheweke bakal tanggung jawab kanggo ngowahi data saka database menyang obyek Jawa sing kita kenal. Kelas pembantu sing prasaja. Kita biasane nggawe kabeh kelas minangka public class ClassName, nanging iki ora perlu. Kita bisa ngumumake kelas pembantu kita mung minangka class Mapper. Ing kasus iki, iku isih nindakake sawijining tugas, nanging ora katon kanggo wong njaba paket services!
package services;

class Mapper {
}


package services;

public class CarService {

   Mapper mapper;
}
Lan iki, nyatane, minangka logika sing bener: kenapa wong ing njaba paket bisa ndeleng kelas tambahan sing mung dianggo karo kelas paket sing padha?

modifier umum

Lan pungkasan ing dhaptar, nanging paling ora - modifier public! Sampeyan ketemu dheweke ing dina pisanan sinau ing JavaRush, launching public static void main(String[] args). Akses modifiers.  Pribadi, dilindhungi, standar, umum - 4 Saiki sampeyan wis sinau ceramah babagan antarmuka, tujuane wis jelas kanggo sampeyan :) Sawise kabeh, publiciki digawe kanggo menehi pangguna. Contone, antarmuka program sampeyan. Contone, sampeyan nulis program penerjemah, lan bisa nerjemahake teks Rusia menyang Inggris. Sampeyan wis nggawe metode translate(String textInRussian)ing ngendi logika sing dibutuhake ditindakake. Sampeyan menehi tandha cara iki nganggo tembung public, lan saiki bakal dadi bagian saka antarmuka:
public class Translator {

   public String translate(String textInRussian) {

       // translates text from Russian to English
   }
}
Sampeyan bisa nggandhengake telpon menyang cara iki karo tombol "terjemahake" ing layar program - lan iku! Sapa wae bisa nggunakake. Bagéan saka kode sing ditandhani karo modifier publicdimaksudaké kanggo pangguna pungkasan. Kanggo menehi conto saka urip, privateiki kabeh proses sing kedadeyan ing TV nalika digunakake, lan publiciki minangka tombol ing remot kontrol TV sing bisa dikontrol dening pangguna. Ing wektu sing padha, dheweke ora perlu ngerti cara kerja TV lan cara kerjane. Remot kontrol minangka set public-metode: on(), off(), nextChannel(), previousChannel(), increaseVolume(), decreaseVolume()etc.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION