CodeGym/Java Blog/சீரற்ற/அடிப்படை வகுப்பு கட்டமைப்பாளர்கள்
John Squirrels
நிலை 41
San Francisco

அடிப்படை வகுப்பு கட்டமைப்பாளர்கள்

சீரற்ற குழுவில் வெளியிடப்பட்டது
members
வணக்கம்! கடந்த முறை நாங்கள் கட்டமைப்பாளர்களைப் பற்றி பேசினோம், அவர்களைப் பற்றி நிறைய கற்றுக்கொண்டோம். இப்போது நாம் அடிப்படை வகுப்பு கட்டமைப்பாளர்களைப் பற்றி பேசப் போகிறோம் .
அடிப்படை வகுப்பு கட்டமைப்பாளர்கள் - 1
அடிப்படை வகுப்பு என்றால் என்ன ? ஜாவாவில் பல வேறுபட்ட வகுப்புகள் பொதுவான தோற்றம் கொண்டதாக இருக்கலாம் என்ற உண்மையுடன் தொடர்புடையது.
அடிப்படை வகுப்பு கட்டமைப்பாளர்கள் - 2
இது பரம்பரை எனப்படும் . பல குழந்தை வகுப்புகளுக்கு ஒரு பொதுவான மூதாதையர் இருக்கலாம். எடுத்துக்காட்டாக, எங்களிடம் ஒரு Animalவகுப்பு இருப்பதாக கற்பனை செய்து பாருங்கள்:
public class Animal {

   String name;
   int age;
}
நாம் 2 குழந்தை வகுப்புகளை அறிவிக்கலாம்: Catமற்றும் Dog. நீட்டிப்புகள் என்ற முக்கிய சொல்லைப் பயன்படுத்தி இது செய்யப்படுகிறது .
public class Cat extends Animal {

}

public class Dog extends Animal {

}
இது எதிர்காலத்தில் நமக்கு பயனுள்ளதாக இருக்கும். Cat எடுத்துக்காட்டாக, எலிகளைப் பிடிக்க ஒரு பணி இருந்தால், எங்கள் நிரலில் ஒரு பொருளை உருவாக்குவோம் . ஒரு குச்சியைத் துரத்துவது பணி என்றால், நாம் ஒரு Dog பொருளைப் பயன்படுத்துவோம். ஒரு கால்நடை மருத்துவ மனையை உருவகப்படுத்தும் ஒரு திட்டத்தை நாங்கள் உருவாக்கினால், அது வகுப்பில் வேலை செய்யும் Animal (இதனால் பூனைகள் மற்றும் நாய்கள் இரண்டிற்கும் சிகிச்சையளிக்க முடியும்). ஒரு பொருளை உருவாக்கும்போது, ​​அதன் அடிப்படை வகுப்பின் கட்டமைப்பாளர் முதலில் அழைக்கப்படுகிறது என்பதை நினைவில் கொள்வது மிகவும் முக்கியம் . அந்த கன்ஸ்ட்ரக்டர் முடிந்த பிறகுதான், நாம் உருவாக்கும் பொருளுக்கு ஏற்ப வகுப்பின் கன்ஸ்ட்ரக்டரை நிரல் செயல்படுத்துகிறது. Catவேறு வார்த்தைகளில் கூறுவதானால், ஒரு பொருளை உருவாக்கும்போது , ​​​​கட்டுமானி Animalமுதலில் இயக்கப்படுகிறது , அதன் பிறகு தான்Catகட்டமைப்பாளர் செயல்படுத்தப்பட்டார் . இதைக் காண, சில கன்சோல் வெளியீட்டை Catமற்றும் Animalகன்ஸ்ட்ரக்டர்களுக்குச் சேர்க்கவும்.
public class Animal {

   public Animal() {
       System.out.println("Animal constructor executed");
   }
}


public class Cat extends Animal {

   public Cat() {
       System.out.println("Cat constructor executed!");
   }

   public static void main(String[] args) {
       Cat cat = new Cat();
   }
}
கன்சோல் வெளியீடு: அனிமல் கன்ஸ்ட்ரக்டர் செயல்படுத்தப்பட்டது கேட் கன்ஸ்ட்ரக்டர் செயல்படுத்தப்பட்டது! உண்மையில், அது அந்த வழியில் வேலை செய்கிறது! ஏன்? இரண்டு வகுப்புகளுக்கு இடையில் பகிரப்பட்ட புலங்களை நகலெடுப்பதைத் தவிர்ப்பது ஒரு காரணம். உதாரணமாக, ஒவ்வொரு மிருகத்திற்கும் இதயம் மற்றும் மூளை உள்ளது, ஆனால் ஒவ்வொரு விலங்குக்கும் வால் இல்லை. அனைத்து விலங்குகளுக்கும் பொதுவான மூளை மற்றும் இதயப்Animal புலங்களை பெற்றோர் வகுப்பிலும், துணை வகுப்பில் வால் புலத்தையும் அறிவிக்கலாம் Cat. . Catஇப்போது அனைத்து 3 புலங்களுக்கும் வாதங்களை எடுக்கும் கிளாஸ் கன்ஸ்ட்ரக்டரை அறிவிப்போம் .
public class Cat extends Animal {

   String tail;

   public Cat(String brain, String heart, String tail) {
       this.brain = brain;
       this.heart = heart;
       this.tail = tail;
   }

   public static void main(String[] args) {
       Cat cat = new Cat("Brain", "Heart", "Tail");
   }
}
குறிப்பு: வகுப்பில் Catமூளை மற்றும் இதயப் புலங்கள் இல்லாவிட்டாலும் கன்ஸ்ட்ரக்டர் சரியாக வேலை செய்கிறது . இந்த புலங்கள் அடிப்படை வகுப்பிலிருந்து "பரம்பரையாக" பெறப்படுகின்றன Animal. பரம்பரை வகுப்பிற்கு அடிப்படை வகுப்பின் புலங்களுக்கு அணுகல் உள்ளது , எனவே அவை எங்கள் வகுப்பில் தெரியும் Cat. இதன் விளைவாக, வகுப்பில் இந்தப் புலங்களை நாங்கள் நகலெடுக்க வேண்டியதில்லை Cat. நாம் அவர்களை வகுப்பில் இருந்து அழைத்துச் செல்லலாம் Animal. மேலும் என்னவென்றால், சைல்டு கிளாஸ் கன்ஸ்ட்ரக்டரில் பேஸ் கிளாஸ் கன்ஸ்ட்ரக்டரை நாம் வெளிப்படையாக அழைக்கலாம். ஒரு அடிப்படை வகுப்பு " சூப்பர் கிளாஸ் " என்றும் அழைக்கப்படுகிறது . அதனால்தான் ஜாவா அடிப்படை வகுப்பைக் குறிக்க சூப்பர் என்ற முக்கிய சொல்லைப் பயன்படுத்துகிறது. முந்தைய எடுத்துக்காட்டில்
public Cat(String brain, String heart, String tail) {
       this.brain = brain;
       this.heart = heart;
       this.tail = tail;
   }
எங்கள் பெற்றோர் வகுப்பில் ஒவ்வொரு துறையையும் தனித்தனியாக ஒதுக்கினோம். இதை நாம் உண்மையில் செய்ய வேண்டியதில்லை. பெற்றோர் வகுப்பு கட்டமைப்பாளரை அழைத்து தேவையான வாதங்களை அனுப்பினால் போதும்:
public class Animal {

   String brain;
   String heart;

   public Animal(String brain, String heart) {
       this.brain = brain;
       this.heart = heart;
   }

public class Cat extends Animal {

   String tail;

   public Cat(String brain, String heart, String tail) {
       super(brain, heart);
       this.tail = tail;
   }

   public static void main(String[] args) {
       Cat cat = new Cat("Brain", "Heart", "Tail");
   }
}
கன்ஸ்ட்ரக்டரில் Cat, கன்ஸ்ட்ரக்டரை அழைத்து Animalஇரண்டு துறைகளைக் கடந்தோம். எங்களிடம் வெளிப்படையாகத் தொடங்குவதற்கு ஒரே ஒரு புலம் மட்டுமே உள்ளது: வால் , இது இல் இல்லை Animal. ஒரு பொருளை உருவாக்கும்போது முதலில் பெற்றோர் வகுப்பு கட்டமைப்பாளர் அழைக்கப்படுகிறார் என்பதை நாங்கள் குறிப்பிட்டுள்ளதை நினைவில் கொள்கிறீர்களா? அதனால்தான் சூப்பர்() எப்போதும் ஒரு கன்ஸ்ட்ரக்டரில் முதலில் இருக்க வேண்டும்! இல்லையெனில், கன்ஸ்ட்ரக்டர் தர்க்கம் மீறப்படும் மற்றும் நிரல் பிழையை உருவாக்கும்.
public class Cat extends Animal {

   String tail;

   public Cat(String brain, String heart, String tail) {
       this.tail = tail;
       super(brain, heart);// Error!
   }

   public static void main(String[] args) {
       Cat cat = new Cat("Brain", "Heart", "Tail");
   }
}
ஒரு குழந்தை வகுப்பின் ஒரு பொருள் உருவாக்கப்படும் போது, ​​அடிப்படை வகுப்பு கட்டமைப்பாளர் முதலில் அழைக்கப்படுகிறார் என்பதை கம்பைலர் அறிவார். நீங்கள் இந்த நடத்தையை கைமுறையாக மாற்ற முயற்சித்தால், கம்பைலர் அதை அனுமதிக்காது.

ஒரு பொருள் எவ்வாறு உருவாக்கப்படுகிறது

அடிப்படை மற்றும் பெற்றோர் வகுப்பைக் கொண்ட உதாரணத்தை நாங்கள் முன்பு பார்த்தோம்: Animalமற்றும் Cat. இந்த இரண்டு வகுப்புகளையும் எடுத்துக்காட்டுகளாகப் பயன்படுத்தி, ஒரு பொருளை உருவாக்கி மாறிகளை துவக்கும் செயல்முறையை இப்போது பார்ப்போம். நிலையான மற்றும் நிகழ்வு (நிலையற்ற) மாறிகள் இருப்பதை நாம் அறிவோம் . Animalஅடிப்படை வகுப்பில் மாறிகள் உள்ளன என்பதையும், Catகுழந்தை வகுப்பிற்கு அதன் சொந்தம் இருப்பதையும் நாங்கள் அறிவோம் . Animalதெளிவுக்காக, ஒவ்வொரு மற்றும் வகுப்புகளுக்கும் ஒரு நிலையான மாறியைச் சேர்ப்போம் Cat. வகுப்பில் உள்ள விலங்கு எண்ணிக்கை மாறி Animalபூமியில் உள்ள மொத்த விலங்கு இனங்கள் மற்றும் catCount ஆகியவற்றைக் குறிக்கும்மாறி பூனை இனங்களின் எண்ணிக்கையைக் குறிக்கும். கூடுதலாக, இரண்டு வகுப்புகளிலும் உள்ள அனைத்து நிலையான அல்லாத மாறிகளுக்கும் தொடக்க மதிப்புகளை ஒதுக்குவோம் (அது பின்னர் கன்ஸ்ட்ரக்டரில் மாற்றப்படும்).
public class Animal {

   String brain = "Initial value of brain in the Animal class";
   String heart = "Initial value of heart in the Animal class";

   public static int animalCount = 7700000;

   public Animal(String brain, String heart) {
       System.out.println("Animal base class constructor is running");
       System.out.println("Have the variables of the Animal class already been initialized?");
       System.out.println("Current value of static variable animalCount = " + animalCount);
       System.out.println("Current value of brain in the Animal class = " + this.brain);
       System.out.println("Current value of heart in the Animal class = " + this.heart);
       System.out.println("Have the variables of the Cat class already been initialized?");
       System.out.println("Current value of static variable catCount = " + Cat.catCount);

       this.brain = brain;
       this.heart = heart;
       System.out.println("Animal base class constructor is done!");
       System.out.println("Current value of brain = " + this.brain);
       System.out.println("Current value of heart = " + this.heart);
   }
}

public class Cat extends Animal {

   String tail = "Initial value of tail in the Cat class";

   static int catCount = 37;

   public Cat(String brain, String heart, String tail) {
       super(brain, heart);
       System.out.println("The cat class constructor has started (The Animal constructor already finished)");
       System.out.println("Current value of static variable catCount = " + catCount);
       System.out.println("Current value of tail = " + this.tail);
       this.tail = tail;
       System.out.println("Current value of tail = " + this.tail);
   }

   public static void main(String[] args) {
       Cat cat = new Cat("Brain", "Heart", "Tail");
   }
}
எனவே நாங்கள் வகுப்பின் புதிய நிகழ்வை உருவாக்குகிறோம் Cat, இது மரபுரிமையாகிறது Animal. என்ன நடக்கிறது மற்றும் எந்த வரிசையில் உள்ளது என்பதைப் பார்க்க, சில விரிவான கன்சோல் வெளியீட்டைச் சேர்த்துள்ளோம். Catஒரு பொருளை உருவாக்கும்போது இது காட்டப்படும் :அனிமல் பேஸ் கிளாஸ் கன்ஸ்ட்ரக்டர் இயங்குகிறது விலங்கு வகுப்பின் மாறிகள் ஏற்கனவே துவக்கப்பட்டதா? நிலையான மாறி விலங்குகளின் தற்போதைய மதிப்பு = 7700000 விலங்கு வகுப்பில் மூளையின் தற்போதைய மதிப்பு = விலங்கு வகுப்பில் மூளையின் ஆரம்ப மதிப்பு விலங்கு வகுப்பில் இதயத்தின் தற்போதைய மதிப்பு = விலங்கு வகுப்பில் இதயத்தின் ஆரம்ப மதிப்பு ஏற்கனவே பூனை வகுப்பின் மாறிகள் உள்ளன துவக்கப்பட்டதா? நிலையான மாறி catCount இன் தற்போதைய மதிப்பு = 37 அனிமல் பேஸ் கிளாஸ் கன்ஸ்ட்ரக்டர் முடிந்தது! மூளையின் தற்போதைய மதிப்பு = மூளையின் தற்போதைய மதிப்பு இதயம் = இதயம் பூனை வகுப்பு கட்டமைப்பாளர் தொடங்கினார் (விலங்கு கட்டமைப்பாளர் ஏற்கனவே முடிக்கப்பட்டுவிட்டார்) நிலையான மாறியின் தற்போதைய மதிப்பு catCount = 37 வால் தற்போதைய மதிப்பு = பூனை வகுப்பில் வால் ஆரம்ப மதிப்பு வால் தற்போதைய மதிப்பு = வால் எனவே, இப்போது ஒரு புதிய பொருள் உருவாக்கப்படும் போது மாறி துவக்கம் மற்றும் கட்டமைப்பாளர் அழைப்புகளின் வரிசையை நாம் தெளிவாகக் காணலாம்:
  1. அடிப்படை வகுப்பு ( ) இன் நிலையான மாறிகள் Animalதுவக்கப்படுகின்றன. எங்கள் விஷயத்தில், Animalவகுப்பின் மாறி விலங்கு எண்ணிக்கை 7700000 ஆக அமைக்கப்பட்டுள்ளது.

  2. குழந்தை வகுப்பு ( ) இன் நிலையான மாறிகள் Catதுவக்கப்படுகின்றன.

    குறிப்பு: நாங்கள் இன்னும் கன்ஸ்ட்ரக்டருக்குள் இருக்கிறோம் Animal, நாங்கள் ஏற்கனவே காட்சிப்படுத்தியுள்ளோம்:

    அனிமல் பேஸ் கிளாஸ் கன்ஸ்ட்ரக்டர் இயங்குகிறது
    விலங்கு வகுப்பின் மாறிகள் ஏற்கனவே துவக்கப்பட்டதா?
    நிலையான மாறி விலங்குகளின் தற்போதைய மதிப்பு = 7700000
    விலங்கு வகுப்பில் மூளையின் தற்போதைய மதிப்பு = விலங்கு வகுப்பில் மூளையின் ஆரம்ப மதிப்பு
    விலங்கு வகுப்பில் இதயத்தின் தற்போதைய மதிப்பு = விலங்கு வகுப்பில் இதயத்தின் ஆரம்ப மதிப்பு
    ஏற்கனவே பூனை வகுப்பின் மாறிகள் உள்ளன துவக்கப்பட்டதா?
    நிலையான மாறி catCount இன் தற்போதைய மதிப்பு = 37


  3. பின்னர் அடிப்படை வகுப்பின் நிலையான அல்லாத மாறிகள் துவக்கப்படும். நாங்கள் அவர்களுக்கு ஆரம்ப மதிப்புகளை குறிப்பாக ஒதுக்கினோம், பின்னர் அவை கட்டமைப்பாளரில் மாற்றப்படும். விலங்கு கட்டமைப்பாளர் இன்னும் முடிக்கப்படவில்லை, ஆனால் மூளை மற்றும் இதயத்தின் ஆரம்ப மதிப்புகள் ஏற்கனவே ஒதுக்கப்பட்டுள்ளன:

    அனிமல் பேஸ் கிளாஸ் கன்ஸ்ட்ரக்டர் இயங்குகிறது
    விலங்கு வகுப்பின் மாறிகள் ஏற்கனவே துவக்கப்பட்டதா?
    நிலையான மாறி விலங்குகளின் தற்போதைய மதிப்பு = 7700000
    விலங்கு வகுப்பில் மூளையின் தற்போதைய மதிப்பு = விலங்கு வகுப்பில் மூளையின் ஆரம்ப மதிப்பு
    விலங்கு வகுப்பில் இதயத்தின் தற்போதைய மதிப்பு = விலங்கு வகுப்பில் இதயத்தின் ஆரம்ப மதிப்பு


  4. அடிப்படை வகுப்பு கட்டமைப்பாளர் தொடங்குகிறது.
    இந்த படி நான்காவது என்பதை நாங்கள் ஏற்கனவே நம்பியுள்ளோம்: கன்ஸ்ட்ரக்டரின் தொடக்கத்தில் முதல் மூன்று படிகளில் Animal, பல மாறிகளுக்கு ஏற்கனவே மதிப்புகள் ஒதுக்கப்பட்டுள்ளன.


  5. குழந்தை வகுப்பின் ( ) நிலையற்ற புலங்கள் Catதுவக்கப்படுகின்றன. கன்ஸ்ட்ரக்டர் இயங்கத் தொடங்கும்
    முன் இது நடக்கும் . அது இயங்கத் தொடங்கும் போது, ​​வால் மாறி ஏற்கனவே ஒரு மதிப்பைக் கொண்டுள்ளது:Cat

    கேட் கிளாஸ் கன்ஸ்ட்ரக்டர் தொடங்கிவிட்டது (அனிமல் கன்ஸ்ட்ரக்டர் ஏற்கனவே முடிந்தது) நிலையான மாறி catCount இன் தற்போதைய மதிப்பு = 37 வால் தற்போதைய மதிப்பு = பூனை வகுப்பில் வால் ஆரம்ப மதிப்பு


  6. குழந்தை வகுப்பின் கட்டமைப்பாளர் Catஅழைக்கப்படுகிறார்

    ஜாவாவில் ஒரு பொருளை உருவாக்குவது அப்படித்தான்!

    நாங்கள் கற்றுக்கொள்வதில் பெரிய ரசிகர்கள் இல்லை என்று நான் சொல்ல வேண்டும், ஆனால் மாறி தொடங்குதல் மற்றும் கட்டமைப்பாளர் அழைப்புகளின் வரிசையை மனப்பாடம் செய்வது சிறந்தது .

    இது நிரலின் ஓட்டம் மற்றும் எந்த குறிப்பிட்ட தருணத்திலும் உங்கள் பொருள்களின் நிலை பற்றிய உங்கள் புரிதலை பெரிதும் அதிகரிக்கும்.

    மேலும், பல வகுப்புகள் பரம்பரையைப் பயன்படுத்துவதில்லை. இந்த வழக்கில், அடிப்படை வகுப்பு தொடர்பான படிகள் பொருந்தாது.

கருத்துக்கள்
  • பிரபலமானவை
  • புதியவை
  • பழையவை
ஒரு கருத்தைத் தெரிவிக்க நீங்கள் உள்நுழைந்திருக்க வேண்டும்
இந்தப் பக்கத்தில் இதுவரை எந்தக் கருத்தும் வழங்கப்படவில்லை