হয় super()
পিতা বা মাতা কন্সট্রাকটর কল করতেন? দয়া করে ব্যাখ্যা করুন super()
।
হয় super()
পিতা বা মাতা কন্সট্রাকটর কল করতেন? দয়া করে ব্যাখ্যা করুন super()
।
উত্তর:
super()
কোনও যুক্তি ছাড়াই প্যারেন্ট কনস্ট্রাক্টরকে কল করে।
এটি যুক্তি দিয়েও ব্যবহার করা যেতে পারে। Ie super(argument1)
এবং এটি সেই কনস্ট্রাক্টরকে কল করবে যা ধরণের 1 পরামিতি গ্রহণ করে argument1
(যদি উপস্থিত থাকে)।
এছাড়াও এটি পিতামাতার কাছ থেকে পদ্ধতি কল করতে ব্যবহার করা যেতে পারে। অর্থাতsuper.aMethod()
আরও তথ্য এবং টিউটোরিয়াল এখানে
super(...)
কেবল কোনও নির্মাণকারীর প্রথম বিবৃতি হিসাবে ব্যবহার করা যেতে পারে।
কিছু ঘটনা:
super()
তাত্ক্ষণিক পিতামাতাকে কল করতে ব্যবহৃত হয়।super()
উদাহরণ সদস্যদের সাথে ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ, ভেরিয়েবল এবং উদাহরণ পদ্ধতি।super()
প্যারেন্ট ক্লাসের কনস্ট্রাক্টরকে কল করতে কনস্ট্রাক্টরের মধ্যে ব্যবহার করা যেতে পারে।ঠিক আছে, এখন এর পয়েন্টগুলি কার্যত প্রয়োগ করা যাক super()
।
প্রোগ্রাম 1 এবং 2 এর মধ্যে পার্থক্যটি দেখুন Here এখানে, প্রোগ্রাম 2 super()
জাভাতে আমাদের প্রথম বিবৃতি প্রমাণ করে ।
প্রোগ্রাম 1
class Base
{
int a = 100;
}
class Sup1 extends Base
{
int a = 200;
void Show()
{
System.out.println(a);
System.out.println(a);
}
public static void main(String[] args)
{
new Sup1().Show();
}
}
আউটপুট:
200
200
এখন প্রোগ্রাম 2 পরীক্ষা করে দেখুন এবং প্রধান পার্থক্যটি বের করার চেষ্টা করুন।
প্রোগ্রাম 2
class Base
{
int a = 100;
}
class Sup2 extends Base
{
int a = 200;
void Show()
{
System.out.println(super.a);
System.out.println(a);
}
public static void main(String[] args)
{
new Sup2().Show();
}
}
আউটপুট:
100
200
প্রোগ্রাম 1 এ, আউটপুটটি কেবল উত্পন্ন শ্রেণীর ছিল। এটি বেস ক্লাস বা অভিভাবক শ্রেণির না কারও ভেরিয়েবল মুদ্রণ করতে পারে। তবে প্রোগ্রাম 2-এ, আমরা এর আউটপুট প্রিন্ট করার সময় super()
ভেরিয়েবলের সাথে ব্যবহার করেছি a
, এবং a
উত্পন্ন শ্রেণীর ভেরিয়েবলের মান মুদ্রণের পরিবর্তে , এটি a
বেস শ্রেণীর ভেরিয়েবলের মান মুদ্রণ করে । সুতরাং এটি প্রমাণ করে যে super()
তাত্ক্ষণিক পিতামাতাকে কল করতে ব্যবহৃত হয়।
ঠিক আছে, এখন প্রোগ্রাম 3 এবং প্রোগ্রাম 4 এর মধ্যে পার্থক্যটি পরীক্ষা করে দেখুন।
প্রোগ্রাম 3
class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}
class Sup3 extends Base
{
int a = 200;
void Show()
{
System.out.println(a);
}
public static void Main(String[] args)
{
new Sup3().Show();
}
}
আউটপুট:
200
এখানে আউটপুট 200. যখন আমরা বলা হয় Show()
, Show()
উদ্ভূত ক্লাসের ফাংশন বলা হয়। কিন্তু আমরা Show()
পিতামাত্ত শ্রেণীর ফাংশনটি বলতে চাইলে আমাদের কী করা উচিত ? সমাধানের জন্য প্রোগ্রাম 4 পরীক্ষা করে দেখুন।
প্রোগ্রাম 4
class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}
class Sup4 extends Base
{
int a = 200;
void Show()
{
super.Show();
System.out.println(a);
}
public static void Main(String[] args)
{
new Sup4().Show();
}
}
আউটপুট:
100
200
এখানে আমরা দুটি আউটপুট পাচ্ছি, 100 এবং 200. যখন Show()
উদ্ভূত শ্রেণীর ক্রিয়াকলাপটি শুরু হয়, তখন এটি প্রথমে Show()
পিতামাত্ত শ্রেণীর ফাংশনটিকে ডাকে , কারণ Show()
ডেরাইভেড শ্রেণীর ফাংশনের অভ্যন্তরে আমরা পিতামাত্ত শ্রেণীর Show()
ফাংশনটিকে ডেকে আছি super
সামনে ফাংশনের নাম শব্দ।
super()
একটি কীওয়ার্ড নয়। এটি একটি নির্মাণকারীর প্রার্থনা। super
একটি কীওয়ার্ড, এবং # 1 এবং # 2 কেবলমাত্র সেই সংজ্ঞা দিয়েই বোঝায়।
উত্স নিবন্ধ: জাভা: কলিং সুপার ()
হ্যাঁ. super(...)
সুপার-ক্লাসের কনস্ট্রাক্টরকে অনুরোধ করবে।
চিত্রণ:
class Animal {
public Animal(String arg) {
System.out.println("Constructing an animal: " + arg);
}
}
class Dog extends Animal {
public Dog() {
super("From Dog constructor");
System.out.println("Constructing a dog.");
}
}
public class Test {
public static void main(String[] a) {
new Dog();
}
}
ছাপে:
Constructing an animal: From Dog constructor
Constructing a dog.
super()
এটি কল করেন তবে এটি সুপার-ক্লাসের নির্মাতাকে অনুরোধ করবে যাতে কোনও যুক্তি নেই। একইভাবে, এটি যদি আপনি করেন তবে 1 টি-যুক্তিযুক্ত নির্মাণকারীকে অনুরোধ করবে super(arg1)
এবং আরও।
super()
হবে না , সুতরাং এটি কোনও বৈধ কল হবে না।
সুপার () পিতামাতাদের কনস্ট্রাক্টর কল করতে ব্যবহৃত হয়?
হ্যাঁ.
প্লিজ সুপার () সম্পর্কে ব্যাখ্যা করে।
super()
কীওয়ার্ডের বিশেষ ব্যবহার super
যেখানে আপনি প্যারামিটারলেস প্যারেন্ট কনস্ট্রাক্টরকে কল করেন। সাধারণভাবে, super
কীওয়ার্ডটি ওভাররাইড পদ্ধতিতে কল করতে, লুকানো ক্ষেত্রগুলিতে অ্যাক্সেস করতে বা সুপারক্লাসের নির্মাতাকে ডাকতে ব্যবহার করা যেতে পারে।
এখানে সরকারী টিউটোরিয়াল
super()
প্যারেন্ট কনস্ট্রাক্টরকে কল করতে ব্যবহৃত হয়, super.myMethod()
একটি ওভাররাইড পদ্ধতিতে কল করতে ব্যবহৃত হয়।
নো-আর্গুমেন্টগুলি সুপার কনস্ট্রাক্টরকে কল করা কেবল পর্দার স্থান এবং প্রোগ্রামার সময়ের অপচয়। সংকলক হুবহু একই কোড উত্পন্ন করে, আপনি এটি লেখেন বা না লিখুন।
class Explicit() {
Explicit() {
super();
}
}
class Implicit {
Implicit() {
}
}
আমি সব উত্তর দেখেছি। তবে প্রত্যেকে একটি অত্যন্ত গুরুত্বপূর্ণ বিষয় উল্লেখ করতে ভুলে গিয়েছিল:
সুপার () কনস্ট্রাক্টরের প্রথম লাইনে কল করা বা ব্যবহার করা উচিত।
শুধু সুপার (); এটি ক্লাসের সুপারক্লাসের সাথে উপস্থিত থাকলে কেবলমাত্র ডিফল্ট কনস্ট্রাক্টরকে কল করবে। তবে আপনাকে অবশ্যই স্পষ্টভাবে ডিফল্ট কনস্ট্রাক্টর লিখতে হবে। আপনি যদি জাভা না করেন তবে কোনও বাস্তবায়ন ছাড়াই এটি আপনার জন্য তৈরি করবে, সুপার () সংরক্ষণ করুন; , সর্বজনীন সুপারক্লাস অবজেক্টকে উল্লেখ করে এবং আপনি এটি একটি সাবক্লাসে কল করতে পারবেন না।
public class Alien{
public Alien(){ //Default constructor is written out by user
/** Implementation not shown…**/
}
}
public class WeirdAlien extends Alien{
public WeirdAlien(){
super(); //calls the default constructor in Alien.
}
}
আমি যা বুঝি কোডগুলির সাথে ভাগ করতে চাই।
জাভাতে সুপার কীওয়ার্ড হল একটি রেফারেন্স ভেরিয়েবল যা পিতামাত্ত শ্রেণীর অবজেক্টগুলিকে উল্লেখ করতে ব্যবহৃত হয়। এটি মূলত নিম্নলিখিত প্রসঙ্গে ব্যবহৃত হয়: -
1. ভেরিয়েবল সহ সুপারের ব্যবহার:
class Vehicle
{
int maxSpeed = 120;
}
/* sub class Car extending vehicle */
class Car extends Vehicle
{
int maxSpeed = 180;
void display()
{
/* print maxSpeed of base class (vehicle) */
System.out.println("Maximum Speed: " + super.maxSpeed);
}
}
/* Driver program to test */
class Test
{
public static void main(String[] args)
{
Car small = new Car();
small.display();
}
}
আউটপুট: -
Maximum Speed: 120
/* Base class Person */
class Person
{
void message()
{
System.out.println("This is person class");
}
}
/* Subclass Student */
class Student extends Person
{
void message()
{
System.out.println("This is student class");
}
// Note that display() is only in Student class
void display()
{
// will invoke or call current class message() method
message();
// will invoke or call parent class message() method
super.message();
}
}
/* Driver program to test */
class Test
{
public static void main(String args[])
{
Student s = new Student();
// calling display() of Student
s.display();
}
}
আউটপুট: -
This is student class
This is person class
৩. নির্মাণকারীদের সাথে সুপারের ব্যবহার:
class Person
{
Person()
{
System.out.println("Person class Constructor");
}
}
/* subclass Student extending the Person class */
class Student extends Person
{
Student()
{
// invoke or call parent class constructor
super();
System.out.println("Student class Constructor");
}
}
/* Driver program to test*/
class Test
{
public static void main(String[] args)
{
Student s = new Student();
}
}
আউটপুট: -
Person class Constructor
Student class Constructor
কনস্ট্রাক্টর কনস্ট্রাক্টর
এ আপনি বিন্দু ছাড়াই অন্য কনস্ট্রাক্টরকে কল করতে পারবেন। super
সুপারক্লাসে একটি কনস্ট্রাক্টরকে কল করে; this
এই শ্রেণিতে একজন কনস্ট্রাক্টরকে কল করে:
public MyClass(int a) {
this(a, 5); // Here, I call another one of this class's constructors.
}
public MyClass(int a, int b) {
super(a, b); // Then, I call one of the superclass's constructors.
}
super
সুপারক্লাসটি নিজেকে আরম্ভ করার প্রয়োজন হলে দরকারী। this
আপনাকে সমস্ত হার্ড ইনিশিয়েলশন কোডটি কেবল একবার নির্মাণকারীর মধ্যে একবারে লেখার অনুমতি দেওয়ার জন্য এবং অন্য সমস্ত, সহজেই লেখার থেকে সহজে লেখার জন্য এটি কল করার জন্য দরকারী।
পদ্ধতিগুলি
যে কোনও পদ্ধতিতে, আপনি অন্য কোনও পদ্ধতিতে কল করতে এটি বিন্দুর সাহায্যে ব্যবহার করতে পারেন। super.method()
সুপারক্লাসে একটি পদ্ধতি কল করে; this.method()
এই শ্রেণিতে একটি পদ্ধতি কল করে:
public String toString() {
int hp = this.hitpoints(); // Calls the hitpoints method in this class
// for this object.
String name = super.name(); // Calls the name method in the superclass
// for this object.
return "[" + name + ": " + hp + " HP]";
}
super
নির্দিষ্ট দৃশ্যে কার্যকর: আপনার ক্লাসে যদি আপনার সুপারক্লাসের মতো একই পদ্ধতি থাকে তবে জাভা ধরে নিবে যে আপনি আপনার ক্লাসের একটি চান; super
পরিবর্তে আপনাকে সুপারক্লাসের পদ্ধতি জিজ্ঞাসা করতে দেয়। this
আপনার কোডটি আরও পঠনযোগ্য করার উপায় হিসাবে কেবল কার্যকর।
সুপার শব্দ সুপারক্লাস কন্সট্রাকটর ডাকতে এবং সুপারক্লাস সদস্য নির্দেশ করতে ব্যবহার করা যেতে পারে
আপনি যখন সঠিক আর্গুমেন্ট সহ সুপার () কল করেন, আমরা আসলে কনস্ট্রাক্টর বক্সকে কল করি যা ভেরিয়েবলের প্রস্থ , উচ্চতা এবং গভীরতা সূচনা করে, সংশ্লিষ্ট পরামিতিগুলির মান ব্যবহার করে এটি উল্লেখ করা হয়। আপনি কেবল এর মান যুক্ত ওজন আরম্ভ করার জন্য রয়েছেন। প্রয়োজনে, আপনি এখন ব্যক্তিগত হিসাবে শ্রেণি ভেরিয়েবল বক্স করতে পারেন । বক্স শ্রেণীর বেসরকারী সংশোধকগুলির ক্ষেত্রগুলিতে লিখুন এবং নিশ্চিত করুন যে কোনও সমস্যা ছাড়াই আপনি এগুলি অ্যাক্সেস করতে পারবেন।
সুপারক্লাসে বেশ কয়েকটি ওভারলোড হওয়া সংস্করণ নির্মাতা হতে পারে, যাতে আপনি বিভিন্ন পরামিতি সহ পদ্ধতিটিকে সুপার () বলতে পারেন । প্রোগ্রামটি নির্ধারকটি সম্পাদন করবে যা নির্দিষ্ট যুক্তিগুলির সাথে মেলে।
public class Box {
int width;
int height;
int depth;
Box(int w, int h, int d) {
width = w;
height = h;
depth = d;
}
public static void main(String[] args){
HeavyBox heavy = new HeavyBox(12, 32, 23, 13);
}
}
class HeavyBox extends Box {
int weight;
HeavyBox(int w, int h, int d, int m) {
//call the superclass constructor
super(w, h, d);
weight = m;
}
}
সুপার একটি কীওয়ার্ড। এটি একটি সুপার-ক্লাসে সংজ্ঞায়িত একটি পদ্ধতি কল করতে একটি উপ-শ্রেণীর পদ্ধতি সংজ্ঞায়নের অভ্যন্তরে ব্যবহৃত হয়। সুপারক্লাসের ব্যক্তিগত পদ্ধতিগুলি কল করা যায় না। সুপার কীওয়ার্ড দ্বারা কেবল সর্বজনীন এবং সুরক্ষিত পদ্ধতি কল করা যেতে পারে। এটি ক্লাস কনস্ট্রাক্টররাও এর প্যারেন্ট ক্লাসের কনস্ট্রাক্টরদের ডাকতে ব্যবহার করে।
যেমন বলা হয়েছে, ডিফল্ট কনস্ট্রাক্টরের ভিতরে কনস্ট্রাক্টরের প্রথম লাইনে একটি অন্তর্নিহিত সুপার () বলা হয় ।
এই সুপার () স্বয়ংক্রিয়ভাবে নির্মাণ শ্রেণীর শ্রেণীর শ্রেণিবিন্যাসের শীর্ষে শুরু করে একটি শৃঙ্খলা কল করে এবং শ্রেণিবিন্যাসের নীচে চলে যায়।
প্রোগ্রামের শ্রেণিবিন্যাসে যদি আরও দুটি ক্লাস থাকে তবে শীর্ষ শ্রেণীর ডিফল্ট কনস্ট্রাক্টরকে প্রথমে ডাকা হত ।
এখানে এর উদাহরণ দেওয়া হল:
class A {
A() {
System.out.println("Constructor A");
}
}
class B extends A{
public B() {
System.out.println("Constructor B");
}
}
class C extends B{
public C() {
System.out.println("Constructor C");
}
public static void main(String[] args) {
C c1 = new C();
}
}
উপরের আউটপুট হবে:
Constructor A
Constructor B
Constructor C