JavaRush /Blog Jawa /Random-JV /Kelas anonim ing basa Jawa

Kelas anonim ing basa Jawa

Diterbitake ing grup
Hello! Ing pawulangan dina iki kita bakal terus ndeleng topik kelas bersarang. Giliran klompok pungkasan - kelas batin anonim ing Jawa. Ayo bali menyang diagram kita: Kelas anonim - 2Kaya kelas lokal sing kita rembugan ing kuliah pungkasan, kelas anonim minangka subset saka kelas batin. Dheweke uga duwe sawetara podho lan beda ing antarane. Nanging pisanan, ayo ngerteni: kenapa dheweke diarani "anonim"? Kanggo nindakake iki, ayo goleki conto sing gampang. Mbayangno yen kita duwe program utama sing terus-terusan mlaku lan nindakake apa wae. Kita arep nggawe sistem ngawasi kanggo program iki dumadi saka sawetara modul. Siji modul bakal ngawasi pratondho kinerja umum lan nyimpen log, sing kapindho bakal ngrekam lan nyathet kesalahan ing log kesalahan, sing katelu bakal ngawasi aktivitas sing curiga: contone, upaya akses sing ora sah lan liyane sing gegandhengan karo keamanan. Amarga kabeh telung modul kasebut mung kudu diwiwiti ing wiwitan program lan mbukak ing latar mburi, luwih becik nggawe antarmuka umum kanggo dheweke:
public interface MonitoringSystem {

   public void startMonitoring();
}
Iki bakal ditindakake dening 3 kelas khusus:
public class GeneralIndicatorsMonitoringModule implements MonitoringSystem {

@Override
   public void startMonitoring() {
       System.out.println("Monitoring of general indicators has started!");
   }
}


public class ErrorMonitoringModule implements MonitoringSystem {

   @Override
   public void startMonitoring() {
       System.out.println("Bug Tracking Monitoring Started!");
   }
}


public class SecurityModule implements MonitoringSystem {

   @Override
   public void startMonitoring() {
       System.out.println("Security monitoring started!");
   }
}
Iku bakal katon sing kabeh ing urutan. Kita duwe sistem sing cukup jelas saka sawetara modul. Saben-saben nduweni tingkah lakune dhewe-dhewe. Yen kita butuh modul anyar, kita bisa nambah, amarga kita duwe antarmuka sing gampang diimplementasikake. Nanging ayo dipikirake kepiye sistem ngawasi bisa digunakake. Kelas anonim - 3Ateges, kita mung kudu nggawe 3 obyek - GeneralIndicatorsMonitoringModule, ErrorMonitoringModule, SecurityModule- lan nelpon cara startMonitoring()ing saben wong. Sing, sampeyan mung kudu nggawe 3 obyek lan nelpon 1 cara ing wong.
public class Main {

   public static void main(String[] args) {

       GeneralIndicatorsMonitoringModule generalModule = new GeneralIndicatorsMonitoringModule();
       ErrorMonitoringModule errorModule = new ErrorMonitoringModule();
       SecurityModule securityModule = new SecurityModule();

       generalModule.startMonitoring();
       errorModule.startMonitoring();
       securityModule.startMonitoring();
   }
}
Output konsol:

Мониторинг общих показателей стартовал!
Мониторинг отслеживания ошибок стартовал!
Мониторинг безопасности стартовал!
Lan kanggo proyek cilik, kita nulis kabeh sistem: 3 kelas lan siji antarmuka! Lan kabeh iki kanggo 6 baris kode. Ing sisih liya, apa pilihan kita? Ya, ora apik banget yen kita nulis kelas "disposable" kaya ngono. Nanging kepiye carane bisa ndandani iki? Iki ngendi kelas batin anonim teka kanggo bantuan kita ! Mangkene apa sing katon ing kasus kita:
public class Main {

   public static void main(String[] args) {

       MonitoringSystem generalModule = new MonitoringSystem() {
           @Override
           public void startMonitoring() {
               System.out.println("Monitoring of general indicators has started!");
           }
       };



           MonitoringSystem errorModule = new MonitoringSystem() {
           @Override
           public void startMonitoring() {
               System.out.println("Bug Tracking Monitoring Started!");
           }
       };

       MonitoringSystem securityModule = new MonitoringSystem() {
           @Override
           public void startMonitoring() {
               System.out.println("Security monitoring started!");
           }
       };

       generalModule.startMonitoring();
       errorModule.startMonitoring();
       securityModule.startMonitoring();
   }
}
Ayo ngerteni apa sing kedadeyan ing kene! Katon kaya kita nggawe obyek antarmuka:
MonitoringSystem generalModule = new MonitoringSystem() {

@Override
   public void startMonitoring() {
       System.out.println("Monitoring of general indicators has started!");
   }
};
Nanging kita wis suwe ngerti manawa ora bisa nggawe obyek antarmuka! Bener, ora mungkin. Nyatane, kita ora nglakoni. Wektu kita nulis:
MonitoringSystem generalModule = new MonitoringSystem() {

};
Ing mesin Java, kedadeyan ing ngisor iki:
  1. Kelas Java sing ora dijenengi digawe sing ngetrapake MonitoringSystem.
  2. Compiler, ndeleng kelas kuwi, mbutuhake sampeyan kanggo ngleksanakake kabeh cara antarmuka MonitoringSystem(kita nindakake iki 3 kaping).
  3. Siji obyek saka kelas iki digawe. Pay manungsa waé menyang kode:
MonitoringSystem generalModule = new MonitoringSystem() {

};
Ana titik koma ing pungkasan! Dheweke ngadeg ana alesan. Kita bebarengan ngumumake kelas (liwat penyonggo kriting) lan nggawe obyek nggunakake (); Saben telung obyek wis overridden cara startMonitoring()ing cara dhewe. Ing pungkasan kita mung nelpon cara iki kanggo saben wong:
generalModule.startMonitoring();
errorModule.startMonitoring();
securityModule.startMonitoring();
Output konsol:

Мониторинг общих показателей стартовал!
Мониторинг отслеживания ошибок стартовал!
Мониторинг безопасности стартовал!
Iku kabeh! Kita wis rampung tugas kita: kita wis nggawe telung obyek MonitoringSystem, redefined ing telung cara, lan disebut kaping telu. Kabeh telung modul kasil diluncurake lan digunakake. Ing wektu sing padha, struktur program kita dadi luwih gampang! GeneralIndicatorsMonitoringModuleSawise kabeh , kelas ErrorMonitoringModulesaiki bisa SecurityModuledibusak saka program kabeh! Kita ora butuh wong-wong mau - kita bisa kanthi becik tanpa dheweke. Yen saben kelas modul anonim mbutuhake sawetara prilaku sing beda-beda, cara tartamtu dhewe sing ora diduweni liyane, kita bisa nambah kanthi gampang:
MonitoringSystem generalModule = new MonitoringSystem() {

   @Override
   public void startMonitoring() {
       System.out.println("Monitoring of general indicators has started!");
   }

   public void someSpecificMethod() {

       System.out.println("Specific method for first module only");
   }
};
Dokumentasi Oracle duwe rekomendasi sing apik : "Gunakake kelas anonim yen sampeyan butuh kelas lokal kanggo panggunaan siji-sijine." Kelas anonim minangka kelas batin sing lengkap. Mulane, nduweni akses menyang variabel kelas njaba, kalebu sing statis lan pribadi:
public class Main {

   private static int currentErrorsCount = 23;

   public static void main(String[] args) {

       MonitoringSystem errorModule = new MonitoringSystem() {

           @Override
           public void startMonitoring() {
               System.out.println("Bug Tracking Monitoring Started!");
           }

           public int getCurrentErrorsCount() {

               return currentErrorsCount;
           }
       };
   }
}
Padha duwe soko ing umum karo kelas lokal: padha katon mung nang cara kang ditetepake. Ing conto ing ndhuwur, sembarang upaya kanggo ngakses obyek errorModuleing njaba cara main()bakal gagal. Lan siji watesan sing luwih penting sing diwarisake kelas anonim saka "leluhur" - kelas batin: kelas anonim ora bisa ngemot variabel lan metode statis . Yen kita nyoba nggawe cara getCurrentErrorsCount()saka conto ing ndhuwur statis, compiler bakal mbuwang kesalahan:
//error! Inner classes cannot have static declarations
public static int getCurrentErrorsCount() {

   return currentErrorsCount;
}
Kita entuk asil sing padha yen nyoba ngumumake variabel statis:
MonitoringSystem errorModule = new MonitoringSystem() {

   //error! Inner classes cannot have static declarations!
   static int staticInt = 10;

   @Override
   public void startMonitoring() {
       System.out.println("Bug Tracking Monitoring Started!");
   }

};
Pungkasan, aku bisa menehi rekomendasi video sing apik banget babagan topik kelas anonim, ing ngendi topik iki diterangake kanthi gampang lan jelas :)
Lan pelajaran dina iki wis rampung! Lan sanajan kita wis nutupi klompok pungkasan kelas nested, kita durung rampung karo topik iki. Apa sing bakal kita sinau sabanjure babagan kelas nested? Sampeyan mesthi bakal ngerti rauh! :)
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION