है super()
माता पिता निर्माता कहा करते थे? कृपया समझाएं super()
।
है super()
माता पिता निर्माता कहा करते थे? कृपया समझाएं super()
।
जवाबों:
super()
पैरेंट कंस्ट्रक्टर को बिना किसी तर्क के कॉल करता है।
इसका उपयोग तर्कों के साथ भी किया जा सकता है। Ie super(argument1)
और यह कंस्ट्रक्टर को उस प्रकार के 1 पैरामीटर को स्वीकार करेगा जो argument1
(यदि मौजूद है)।
साथ ही इसका उपयोग अभिभावकों से कॉल करने के तरीकों के लिए किया जा सकता है। अर्थातsuper.aMethod()
अधिक जानकारी और ट्यूटोरियल यहाँ
super(...)
केवल एक निर्माता में पहले बयान के रूप में इस्तेमाल किया जा सकता है।
कुछ तथ्य:
super()
तत्काल माता-पिता को कॉल करने के लिए उपयोग किया जाता है।super()
उदाहरण के सदस्यों, उदाहरण के चर और उदाहरण के तरीकों के साथ इस्तेमाल किया जा सकता है।super()
पैरेंट क्लास के कंस्ट्रक्टर को कॉल करने के लिए एक कंस्ट्रक्टर के भीतर इस्तेमाल किया जा सकता है।ठीक है, अब चलो व्यावहारिक रूप से इन बिंदुओं को लागू करते हैं super()
।
प्रोग्राम 1 और 2 के बीच अंतर की जाँच करें। यहाँ, प्रोग्राम 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()
कि यह सुपर क्लास के कंस्ट्रक्टर को आमंत्रित करेगा जो कोई तर्क नहीं लेता है। इसी तरह, यदि आप ऐसा करते हैं super(arg1)
, तो यह 1-तर्क निर्माता को आमंत्रित करेगा ।
super()
एक वैध कॉल नहीं होगा।
क्या सुपर () का उपयोग मूल निर्माता को कॉल करने के लिए किया जाता है?
हाँ।
Pls सुपर () के बारे में बताएं।
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
3. निर्माणकर्ताओं के साथ सुपर का उपयोग:
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