Java Modifiers

Java Modifiers

Modifiers ऐसे keywords होते हैं जिन्हें हम किसी भी definitions में उनके अर्थ बदलने के लिए जोड़ते हैं।

Java मॆ modifiers को दो groups में विभाजित किया गाया हैं।

Access Modifiers

अब तक हमने कई बार public keyword का इस्तेमाल देखा है, लगभग हमारे हरेक उदाहरण में। public एक access modifier है, इसका मतलब है कि इसका इस्तेमाल किसी classes, attributes, methods और constructors के access कि स्तर निर्धारित करने के लिए किया जाता है।

हम किसी भी classes, attributes, methods और constructors के access level को बदल सकते हैं उन पर access modifier को लागू करके।

जावा मॆ चार प्रकार के access modifiers होते हैं:

  • Public : public modifier का access level हर जगह है। इसे class के अंदर और class के बाहर, तथा package के अंदर और package के बाहर से access किया जा सकता हैं।
  • Protected : protected access modifier का access level, package के अंदर और बाहर दोनों है। लेकिन इसे package के बाहर से केवल inheritance के माध्यम से ही access किया जा सकता हैं।
  • Default : default access modifier का मतलब है कि हम class, field, method, etc. के लिए access modifier को स्पष्ट रूप से घोषित नहीं करते हैं।
  • Private : private modifier का access level केवल घोषित class के अंदर ही है। इसे class के बाहर से एक्सेस नहीं किया जा सकता है।
Java Modifiers

Public

public घोषित एक class, method, constructor, interface आदि को किसी भी अन्य class से access किया जा सकता है। इसलिए, public class के अंदर घोषित fields, methods, blocks को जावा से संबंधित किसी भी class से एक्सेस किया जा सकता है।

हालाँकि, यदि हम किसी ऐसा public class तक पहुँचने का प्रयास कर रहे हैं, जो एक अलग ही package में है, तो हमे public class को import करने की आवश्यकता पड़ती है। class inheritance के सहायता से, किसी भी class के सभी public methods और variables इसके subclasses द्वारा विरासत में मिल जाता हैं।

नीचे class और package के अंदर public access modifier का उदाहरण दिया गया है।

Example Access Modifier: Public Within Class
package testapplication;

public class Animals {

  public static void main(String[] args) {
    System.out.println("Animals can run");
  }
}
// Result: Animals can run
Example Access Modifier: Public Within Package
package testapplication;

class Animals {

  public void eatMethod() {
    System.out.println("Animals eats: within Package");
  }
}

class Dog {

  public static void main(String[] args) {
    Animals objDog = new Animals();
    objDog.eatMethod();
  }
}
// Result: Animals eats: within Package

Protected

Variables, methods और constructors जिन्हें superclass में protected घोषित किया जाता है, उन्हें केवल उसी package में और अन्य package मे subclasses द्वारा ही एक्सेस किया जा सकता है। Subclasses और Superclasses के बारे में हम Inheritance चैप्टर में बिस्तार से जानेंगे।

Protected access modifier को class और interfaces पर लागू नहीं किया जा सकता है। इसे fields, methods और constructors पर लागू किया जा सकता है।

Fields, methods को protected घोषित किया जा सकता है लेकिन, interface के अंदर methods और fields को protected घोषित नहीं किया जा सकता है।

यह default modifer की तुलना में अधिक accessibility प्रदान करता है।

नीचे class और package के अंदर Protected access modifier का उदाहरण दिया गया है।

Example Access Modifier: Protected Within Class
package testapplication;

public class Animals {

  public static void main(String[] args) {
    System.out.println("Animals can run");
  }
}
// Result: Animals can run
Example Access Modifier: Protected Within Package
package testapplication;

public class Animals {

  protected void eatMethod() {
    System.out.println("Animals eats: within Package");
  }
}

class Dog {
  public static void main(String[] args) {
    Animals objDog = new Animals();
    objDog.eatMethod();
  }
}
// Result: Animals eats: within Package

उपरोक्त उदाहरण में testapplication पैकेज का Animals क्लास public है, इसलिए इसे पैकेज के बाहर से एक्सेस किया जा सका है। लेकिन इसी पैकेज का eatMethod() मेथड को protected घोषित किया गया है, इसलिए इसे क्लास के बाहर से Inheritance के जरिए ही एक्सेस किया जा सकता है जिन्हे हम निचे दिए गए उदाहरण में देखेंगे।

Example Access Modifier: Protected outside Package using inheritance
package secondpackage;

import testapplication.*;

class NewClass extends Animals {
  public static void main(String[] args) {
    NewClass myObj = new NewClass();
    myObj.eatMethod();
  }
}
// Result: Animals eats: within Package

उपरोक्त उदाहरण में Animal class एक superclass है जिस्की property (गुण) को NewClass नामक subclasses को विरासत मे मिला हैं।

Default

यदि हम किसी भी modifier का उपयोग नहीं करते हैं, तो इसे खुद ब खुद से default माना जाता है। default modifier केवल package के अंदर ही accessible है। इसे package के बाहर से access नहीं किया जा सकता है। यह private की तुलना में अधिक accessibility प्रदान करता है। लेकिन, यह public और protected की तुलना में अधिक प्रतिबंधात्मक है।

Example Access Modifier: default Within Class
package testapplication;

class Animals {
  public static void main(String[] args) {
    System.out.println("Animals can run");
  }
}
// Result: Animals can run
Example Access Modifier: default Within Package
package testapplication;

class Animals {
  void eatMethod() {
    System.out.println("Animals eats: within Package");
  }
}

class Dog {
  public static void main(String[] args) {
    Animals objDog = new Animals();
    objDog.eatMethod();
  }
}
// Result: Animals eats: within Package

नीचे उदाहरण में, हमने दो पैकेज testapplication और secondpackage बनाए हैं। हम Animals क्लास को उसके पैकेज के बाहर से एक्सेस करने की कोशिश कर रहे हैं, चुकि Animals क्लास public नहीं है, इसलिए इसे पैकेज के बाहर से एक्सेस नहीं किया जा सकता है।

Example Access Modifier: default trying outside Package
package testapplication;

import secondpackage.*;

class NewClass extends Animals {

  public static void main(String[] args) {
    NewClass myObj = new NewClass(); //Compile Time Error
    myObj.eatMethod(); //Compile Time Error
  }
}

Private

private घोषित किए गए Methods, variables, और constructors केवल घोषित class के अंदर से ही एक्सेस किया जा सकता है।

private access modifier सबसे प्रतिबंधित access level होता है, इसीलिए class और interfaces कभी भी private नहीं हो सकते।

Note: private modifier का उपयोग करना मुख्य तरीका है जिससे कोई वस्तु स्वयं को encapsulates करती है और दुसरो से डेटा छुपाती है।
Example Access Modifier : private Within class
package testapplication;

public class Animals {

  private int num = 10;

  private void eatMethod() {
    System.out.println("Animals eats inside class");
  }

  public static void main(String[] args) {
    Animals myObj = new Animals();
    myObj.eatMethod();
    System.out.println(myObj.num);
  }
}
// Result: Animals eats inside class
// Result: 10

नीचे के उदाहरण में, हमने दो क्लास Animals और Dog बनाए हैं। एक क्लास Animals में private variable और private method है। हम इन datas को क्लास के बाहर से एक्सेस करने की कोशिश कर रहे हैं, इसलिए Java एक compile-time error दिखाएगा।

Example Access Modifier: private Within package
package testapplication;

class Animals {

  private int num = 10;

  private void eatMethod() {
    System.out.println("Animals eats inside class");
  }
}

class Dog {

  public static void main(String[] args) {
    Animals myObj = new Animals();
    myObj.eatMethod(); //Compile Time Error
    System.out.println(myObj.num); //Compile Time Error
  }
}
Note: एक class कभी भी private या protected नहीं हो सकता है, nested class के सिवा। इसीलिए class के लिए, हम public या default का ही उपयोग कर सकते हैं।
Article By: Brajlal Prasad
Created on: 18 Feb 2023  2043  Views
 Print Article
Report Error

If you want to report an error, or any suggestion please send us an email to [email protected]