کلاس های Nested (تو در تو) و Inner

کلاس های Nested (تو در تو) و Inner (داخلی) در جاوا

folderشی گرایی
comments2 دیدگاه
اساطیر زبان

در این آموزش به کمک مثال یاد می گیرید که با کلاس های Inner و Nested در جاوا کار کنید.

در جاوا می توانید یک کلاس را در یک کلاس دیگر تعریف کنید. این کلاس به عنوان کلاس Nested شناخته می شود.

 


جاوا

توی این پک فوق العاده، جاوا رو جوری یاد میگیری که تو هیچ کلاس آموزشی یا پک دیگه ای نه دیدی نه شنیدی! بدون هیچ کلاسی، با جاوا اپلیکیشن بزن، پروژه محور یاد بگیر و حسابی پول در بیار! 


 

class OuterClass {

// …

class NestedClass {

// …

}

}

دو نوع کلاس Nested یا تو در تو می توانید در جاوا ایجاد کنید.

  • کلاس تو در تو غیر استاتیک (کلاس Inner )
  • کلاس تو در تو استاتیک

بیایید ابتدا به کلاس های تو در تو غیر استاتیک نگاه کنیم.

کلاس تو در تو غیر استاتیک

کلاس تو در تو غیر استاتیک یک کلاس در کلاس دیگری است که در آن به اعضای کلاس محصور (کلاس بیرونی) دسترسی دارد. معمولا به عنوان کلاس درونی شناخته می شود.

کلاس داخلی در داخل کلاس بیرونی وجود دارد (برای اینکه یک کلاس درونی را تعریف کنید ، ابتدا باید کلاس بیرونی را تعریف کنید).

به عنوان مثال می توانید کلاس های داخلی را در جاوا تعریف کنید.

مثال ۱ : کلاس داخلی

  1. class CPU {
  2. double price;
  3. class Processor{
  4. double cores;
  5. String manufacturer;
  6. double getCache(){
  7. return 4.3;
  8. }
  9. }
  10. protected class RAM{
  11. double memory;
  12. String manufacturer;
  13. double getClockSpeed(){
  14. return 5.5;
  15. }
  16. }
  17. }
  18. public class Main {
  19. public static void main(String[] args) {
  20. CPU cpu = new CPU();
  21. CPU.Processor processor = cpu.new Processor();
  22. CPU.RAM ram = cpu.new RAM();
  23. System.out.println(“Processor Cache = ” + processor.getCache());
  24. System.out.println(“Ram Clock speed = ” + ram.getClockSpeed());
  25. }
  26. }

خروجی

Processor Cache = 4.3

Ram Clock speed = 5.5

در برنامه بالا، کلاس CPU دو کلاس داخلی Processor و RAM دارد. از آنجا که کلاس RAM کلاس داخلی است می توانید آن را protected قرار دهید.

در کلاس Main ، ابتدا نمونه CPU ایجاد می شود. و به منظور ایجاد نمونه Processor ، عملگر. (نقطه) استفاده می شود.

دسترسی به اعضای کلاس بیرونی در کلاس داخلی

همانطور که بحث کردیم ، کلاس های درونی می توانند به اعضای کلاس بیرونی دسترسی پیدا کنند که با استفاده از کلید واژه this امکان پذیر است.

مثال ۲ : دسترسی به اعضا

  1. public class Car {
  2. String carName;
  3. String carType;
  4. public Car(String name, String type) {
  5. this.carName = name;
  6. this.carType = type;
  7. }
  8. private String getCarName() {
  9. return this.carName;
  10. }
  11. class Engine {
  12. String engineType;
  13. void setEngine() {
  14. // Accessing carType property of Car
  15. if(Car.this.carType.equals(“4WD”)){
  16. // Invoking method getCarName() of Car
  17. if(Car.this.getCarName().equals(“Crysler”)) {
  18. this.engineType = “Bigger”;
  19. } else {
  20. this.engineType = “Smaller”;
  21. }
  22. }else{
  23. this.engineType = “Bigger”;
  24. }
  25. }
  26. String getEngineType(){
  27. return this.engineType;
  28. }
  29. }
  30. }
  31. public class CarMain {
  32. public static void main(String[] args) {
  33. Car car1 = new Car(“Mazda”, “8WD”);
  34. Car.Engine engine = car1.new Engine();
  35. engine.setEngine();
  36. System.out.println(“Engine Type for 8WD= ” + engine.getEngineType());
  37. Car car2 = new Car(“Crysler”, “4WD”);
  38. Car.Engine c2engine = car2.new Engine();
  39. c2engine.setEngine();
  40. System.out.println(“Engine Type for 4WD = ” + c2engine.getEngineType());
  41. }
  42. }

خروجی

Engine Type for 8WD= Bigger

Engine Type for 4WD = Smaller

در برنامه بالا ، در کلاس داخلی Engine ، از کلید واژه this برای دسترسی به متغیر carType کلاس خارجی Car استفاده کرده ایم:

Car.this.carType.equals(“4WD)

این کار امکان پذیر است حتی اگر carType عضو خصوصی از کلاس Car باشد.

همچنین می توانید ببینید از Car.this برای دسترسی به اعضای Car استفاده کرده ایم. اگر از this به جای Car.this استفاده کنید ، فقط به اعضای کلاس Engine دسترسی دارید.

به همین ترتیب ، از کلید واژه this برای دسترسی به ()getCarName از کلاس Car استفاده کرده ایم:

Car.this.getCarName().equals(“Crysler”)

در اینجا ، متد ()getCarName یک متد خصوصی از کلاس Car است.

کلاس داخلی استاتیک

در جاوا می توانید یک کلاس تو در تو تعریف کنید که استاتیک باشد. چنین کلاسی به کلاس تو در تو استاتیک معروف است.

برخلاف کلاس درونی ، کلاس تو در تو استاتیک نمی تواند به متغیرهای عضو کلاس بیرونی دسترسی پیدا کند زیرا کلاس تو در تو استاتیک نیاز به ایجاد نمونه ای از کلاس بیرونی ندارد. از این رو ، هیچ مرجعی از کلاس بیرونی با OuterClass.this وجود ندارد.

بنابراین ، می توانید نمونه ای از کلاس تو در تو استاتیک را مانند زیر ایجاد کنید:

OuterClass.InnerClass obj = new OuterClass.InnerClass();

مثال ۳ : کلاس داخلی استاتیک

  1. Public class MotherBoard {
  2. String model;
  3. public MotherBoard(String model) {
  4. this.model = model;
  5. }
  6. static class USB{
  7. int usb2 = 2;
  8. int usb3 = 1;
  9. int getTotalPorts(){
  10. return usb2 + usb3;
  11. }
  12. }
  13. }
  14. public class Main {
  15. public static void main(String[] args) {
  16. MotherBoard.USB usb = new MotherBoard.USB();
  17. System.out.println(“Total Ports = ” + usb.getTotalPorts());
  18. }
  19. }

خروجی

Total Ports = 3

در برنامه بالا ، با استفاده از کلمه کلیدی static ، کلاس داخلی استاتیک USB را تعریف کردیم.

همچنین می توانید ببینید ، در کلاس Main ، مستقیما نمونه ای از USB را از MotherBoard با عملگر . (نقطه) بدون ایجاد نمونه ای از Motherboard تعریف کردیم.

MotherBoard.USB usb = new MotherBoard.USB();

بیایید ببینیم که اگر سعی کنیم به اعضای کلاس بیرونی دسترسی پیدا کنیم چه اتفاقی خواهد افتاد:

مثال ۴ : دسترسی به اعضای کلاس بیرونی در کلاس داخلی استاتیک

  1. String model;
  2. public MotherBoard(String model) {
  3. this.model = model;
  4. }
  5. static class USB{
  6. int usb2 = 2;
  7. int usb3 = 1;
  8. int getTotalPorts(){
  9. if(MotherBoard.this.model.equals(“MSI”)) {
  10. return 4;
  11. }
  12. else {
  13. return usb2 + usb3;
  14. }
  15. }
  16. }
  17. }
  18. public class Main {
  19. public static void main(String[] args) {
  20. MotherBoard.USB usb = new MotherBoard.USB();
  21. System.out.println(“Total Ports = ” + usb.getTotalPorts());
  22. }
  23. }

خروجی

error: non-static variable this cannot be referenced from a static context

نکات کلیدی جهت یادآوری

  • جاوا با کلاس داخلی به عنوان یک عضو معمولی کلاس رفتار می کند. آن ها دقیقا مانند متد ها و متغیرهایی هستند که درون یک کلاس تعریف شده اند.
  • از آنجا که کلاس داخلی عضو کلاس بیرونی است ، می توانید هرگونه تنظیم کننده سطح دسترسی مانند praivate و protected را به کلاس داخلی اعمال کنید، که در کلاس های عادی امکان پذیر نیست.
  • از آنجا که کلاس تو در تو عضوی از کلاس محصور خارجی است ، می توانید از عملگر . (نقطه) برای دسترسی به کلاس تو در تو و پارامتر هایش استفاده کنید.
  • استفاده از کلاس تو در تو باعث می شود کد خوانا تر باشد و کپسوله سازی بهتری فراهم کند.
  • کلاس های تو در تو غیر استاتیک (کلاس های داخلی) به سایر اعضای کلاس بیرونی / محصور دسترسی دارند حتی اگر private باشند.

تفاوت پک های حرفه ای ما با آموزشهای رایگان: بطور خلاصه از زمین تا آسمان! 1-پکها، جدیدترین نسخه نرم افزارها را آموزش می دهند با قابلیت های بسیار بیشتر. 2-پکها توسط متخصص آن نرم افزار، به صورت کاملا پروژه محور و با حل چالش هایی که در مسیر کار عملی و حرفه ای با آن روبرو می شوید تهیه شده اند و بعد از استفاده، کاملا برای بازار کار آماده اید! 3- متد این پکها کاملا کار شده و تا ماهها، در ذهن تان ماندگارند و یادگیری بسیار سریعتر و کاملتری خواهید داشت. آموزشهای رایگان فقط دستورات نرم افزارها را (آنهم ناقص) بیان می کنند و تازه برای ورود به بازار باید ماهها تجربه عملی هم کسب کنید !!

turned_in

چرب زبان

با این اپلیکیشن ساده، هر زبانی رو فقط با 5 دقیقه در روز، توی 80 روز مثل بلبل حرف بزن! بهترین متد روز، تقویت حافظه، آموزش تصویری. یادگیری زبان کلید یادگیری هر مهارتی در قرن 21 !


حتما بخوانید!

2 دیدگاه. ارسال دیدگاه جدید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.

فهرست