
new
এবং সবকিছু প্রস্তুত :) এখানে আমরা যখন লিখি তখন কম্পিউটার এবং জাভা মেশিনের অভ্যন্তরে কী ঘটে তা নিয়ে আলোচনা করব, উদাহরণস্বরূপ:
Cat cat = new Cat();
আমরা আগেও এই বিষয়ে কথা বলেছি, কিন্তু আমরা আপনাকে মনে করিয়ে দেব:
- প্রথমত, বস্তু সংরক্ষণের জন্য মেমরি বরাদ্দ করা হয়।
- এরপরে, জাভা মেশিন বস্তুর একটি রেফারেন্স তৈরি করে (আমাদের ক্ষেত্রে রেফারেন্সটি হল Cat cat)।
- অবশেষে, ভেরিয়েবলগুলি শুরু করা হয় এবং কনস্ট্রাক্টরকে বলা হয় (আমরা এই প্রক্রিয়াটি আরও বিস্তারিতভাবে দেখতে যাচ্ছি)।

public class Vehicle {
public static int vehicleCounter = 0;
private String description = "Vehicle";
public Vehicle() {
}
public String getDescription() {
return description;
}
}
public class Truck extends Vehicle {
private static int truckCounter = 0;
private int yearOfManufacture;
private String model;
private int maxSpeed;
public Truck(int yearOfManufacture, String model, int maxSpeed) {
this.yearOfManufacture = yearOfManufacture;
this.model = model;
this.maxSpeed = maxSpeed;
Vehicle.vehicleCounter++;
truckCounter++;
}
}
শ্রেণী Truck
হল একটি ট্রাকের বাস্তবায়ন যার ক্ষেত্রগুলি তার বছর, মডেল এবং সর্বোচ্চ গতির প্রতিনিধিত্ব করে। এখন আমরা এমন একটি বস্তু তৈরি করতে চাই:
public class Main {
public static void main(String[] args) throws IOException {
Truck truck = new Truck(2017, "Scania S 500 4x2", 220);
}
}
জাভা মেশিনে, প্রক্রিয়াটি এইরকম দেখাবে:
-
প্রথম যে জিনিসটি ঘটে তা হল ক্লাসের স্ট্যাটিক ভেরিয়েবলগুলি
Vehicle
শুরু করা হয় । হ্যাঁ, ক্লাসে বললামVehicle
, নাTruck
। কনস্ট্রাক্টরদের কল করার আগে স্ট্যাটিক ভেরিয়েবল শুরু করা হয় এবং এটি প্যারেন্ট ক্লাসে শুরু হয়। আসুন এটি যাচাই করার চেষ্টা করি। আমরা 10 এর সমানvehicleCounter
ক্লাসে ফিল্ড সেট করি এবং এটি এবং কনস্ট্রাক্টরVehicle
উভয়েই প্রদর্শন করার চেষ্টা করি ।Vehicle
Truck
public class Vehicle { public static int vehicleCounter = 10; private String description = "Vehicle"; public Vehicle() { System.out.println(vehicleCounter); } public String getDescription() { return description; } } public class Truck extends Vehicle { private static int truckCount = 0; private int yearOfManufacture; private String model; private int maxSpeed; public Truck(int yearOfManufacture, String model, int maxSpeed) { System.out.println(vehicleCounter); this.yearOfManufacture = yearOfManufacture; this.model = model; this.maxSpeed = maxSpeed; Vehicle.vehicleCounter++; truckCount++; } }
আমরা ইচ্ছাকৃতভাবে প্রিন্টএলএন স্টেটমেন্টটি কনস্ট্রাক্টরের একেবারে শুরুতে রাখি
Truck
যাতে ট্রাকের ক্ষেত্রগুলিvehicleCounter
প্রদর্শিত হওয়ার সময় এখনও আরম্ভ করা হয়নি।এবং এখানে ফলাফল:
10 10
-
প্যারেন্ট ক্লাসের স্ট্যাটিক ভেরিয়েবলগুলি শুরু করার পরে, চাইল্ড ক্লাসের স্ট্যাটিক ভেরিয়েবলগুলি শুরু করা হয়। আমাদের ক্ষেত্রে, এটি
truckCounter
ক্লাসের ক্ষেত্রTruck
।আসুন অন্য একটি পরীক্ষা করি যেখানে আমরা অন্যান্য ক্ষেত্রগুলি শুরু করার আগে কনস্ট্রাক্টরের
truckCounter
ভিতরের মান প্রদর্শন করার চেষ্টা করব :Truck
public class Truck extends Vehicle { private static int truckCounter = 10; private int yearOfManufacture; private String model; private int maxSpeed; public Truck(int yearOfManufacture, String model, int maxSpeed) { System.out.println(truckCounter); this.yearOfManufacture = yearOfManufacture; this.model = model; this.maxSpeed = maxSpeed; Vehicle.vehicleCounter++; truckCounter++; } }
আপনি দেখতে পাচ্ছেন, কনস্ট্রাক্টর শুরু হলে মান 10 ইতিমধ্যেই আমাদের স্ট্যাটিক ভেরিয়েবলে বরাদ্দ করা হয়েছে ।
Truck
-
এটা এখনও নির্মাণকারীদের জন্য সময় না! পরিবর্তনশীল সূচনা অব্যাহত. প্যারেন্ট ক্লাসের নন-স্ট্যাটিক ভেরিয়েবলগুলি তৃতীয় শুরু করা হয়। আপনি দেখতে পাচ্ছেন, উত্তরাধিকার একটি বস্তু তৈরির প্রক্রিয়াটিকে উল্লেখযোগ্যভাবে জটিল করে তোলে, তবে আপনি এটি সম্পর্কে কিছুই করতে পারবেন না: আপনাকে কেবল প্রোগ্রামিংয়ে কিছু জিনিস মনে রাখতে হবে :)
একটি পরীক্ষা হিসাবে, আমরা ক্লাসের
description
ভেরিয়েবলে কিছু প্রাথমিক মান নির্ধারণ করতে পারিVehicle
এবং তারপরে এটি কনস্ট্রাক্টরে পরিবর্তন করতে পারি।public class Vehicle { public static int vehicleCounter = 10; private String description = "Initial value of the description field"; public Vehicle() { System.out.println(description); description = "Vehicle"; System.out.println(description); } public String getDescription() { return description; } }
আসুন আমাদের
main()
পদ্ধতিটি চালাই যা একটি ট্রাক তৈরি করে:public class Main { public static void main(String[] args) throws IOException { Truck truck = new Truck(2017, "Scania S 500 4x2", 220); } }
আমরা নিম্নলিখিত ফলাফল পেতে:
Initial value of the description field Vehicle
এটি প্রমাণ করে যে যখন
Vehicle
কনস্ট্রাক্টর শুরু হয় তখনdescription
ক্ষেত্রটি ইতিমধ্যে একটি মান বরাদ্দ করা হয়েছে। -
অবশেষে, এটি নির্মাণকারীদের জন্য সময়! আরও স্পষ্টভাবে, এটি বেস ক্লাস কনস্ট্রাক্টরের জন্য সময়। এটি বস্তু তৈরির প্রক্রিয়ার চতুর্থ ধাপে আহ্বান করা হয়।
এটি যাচাই করাও মোটামুটি সহজ। কনসোলে দুটি লাইন আউটপুট করার চেষ্টা করা যাক: একটি
Vehicle
বেস ক্লাস কনস্ট্রাক্টরের ভিতরে, দ্বিতীয়টিTruck
কনস্ট্রাক্টরের ভিতরে। আমাদের নিশ্চিত হওয়া দরকার যে ভিতরের লাইনটিVehicle
প্রথমে প্রদর্শিত হয়:public Vehicle() { System.out.println("Hello from the Vehicle constructor!"); } public Truck(int yearOfManufacture, String model, int maxSpeed) { System.out.println("Hello from the Truck constructor!"); this.yearOfManufacture = yearOfManufacture; this.model = model; this.maxSpeed = maxSpeed; Vehicle.vehicleCounter++; truckCounter++; }
আমরা আমাদের পদ্ধতি চালাব
main()
এবং ফলাফলটি দেখব:Hello from the Vehicle constructor! Hello from the Truck constructor!
চমৎকার। তার মানে আমরা ভুল করছি না :) চলুন এগিয়ে যাই।
-
এখন সময় এসেছে শিশু শ্রেণীর, অর্থাৎ আমাদের ক্লাসের অ-স্থির ক্ষেত্রগুলি শুরু করার
Truck
। ক্লাসের মধ্যে অবিলম্বে ক্ষেত্রগুলি পঞ্চম ধাপ পর্যন্ত আরম্ভ করা হয় না! আশ্চর্যজনক, কিন্তু সত্য :) আবার, আমরা একটি সাধারণ পরীক্ষা করব — ঠিক যেমন প্যারেন্ট ক্লাসের সাথে: আমরা ভেরিয়েবলের কিছু প্রাথমিক মান দেবmaxSpeed
এবং কনস্ট্রাক্টরেTruck
আমরা পরীক্ষা করব যে কনস্ট্রাক্টর শুরু করার আগে মানটি বরাদ্দ করা হয়েছিল:public class Truck extends Vehicle { private static int truckCounter = 10; private int yearOfManufacture; private String model; private int maxSpeed = 150; public Truck(int yearOfManufacture, String model, int maxSpeed) { System.out.println("Initial value of maxSpeed = " + this.maxSpeed); this.yearOfManufacture = yearOfManufacture; this.model = model; this.maxSpeed = maxSpeed; Vehicle.vehicleCounter++; truckCounter++; } }
কনসোল আউটপুট:
Initial value of maxSpeed = 150
আপনি দেখতে পাচ্ছেন, যখন
Truck
কনস্ট্রাক্টর শুরু হয়,maxSpeed
ইতিমধ্যেই 150 এর সমান! -
শিশু শ্রেণীর নির্মাতাকে
Truck
বলা হয়।এবং শুধুমাত্র এই মুহুর্তে, সবশেষে, আমরা যে শ্রেণীকে তাত্ক্ষণিক করছি তার নির্মাতাকে বলা হবে!
শুধুমাত্র ষষ্ঠ ধাপে ক্ষেত্রগুলিকে সেই মানগুলি বরাদ্দ করা হবে যা আমরা আমাদের ট্রাকে আর্গুমেন্ট হিসাবে পাস করি।
আপনি দেখতে পাচ্ছেন, একটি ট্রাক "নির্মাণ" করা, অর্থাৎ বস্তু তৈরির প্রক্রিয়া সহজ নয়। কিন্তু মনে হচ্ছে আমরা এটিকে ক্ষুদ্রতম অংশে ভেঙে ফেলেছি :)

GO TO FULL VERSION