Java中的访问修饰符
Java中的访问修饰符用于指定类,变量方法和构造函数的访问级别。
它有助于更新变量的值。
它们也称为可见性修改器。
通过本教程,将了解Java中访问修饰符的重要性。
什么是访问修饰符?
在练习任何Java程序时,我们可能会遇到公共,私有和受保护的关键字,这些关键字称为访问修饰符。
顾名思义,Java中的访问修饰符有助于限制类,构造函数,变量,方法或者数据成员的范围。
可以为类,构造函数,字段和方法分别指定访问修饰符。
它们也称为Java访问说明符,但正确的名称是Java访问修饰符。
因此,让我们深入研究Java中不同类型的访问修饰符。
访问修饰符的类型
Java中有四个访问修饰符关键字,它们是:
默认访问修饰符
专用访问修饰符
公共访问修饰符
受保护的访问修饰符
让我们详细了解其中的每一个。
默认访问修饰符
如果没有为特定的类,方法或者数据成员指定访问修饰符,则称其具有默认访问修饰符。
未使用任何入口修饰符声明的日期成员,类或者方法将具有默认修饰符,该修饰符仅在相似的包中可访问。
这意味着我们不会显式声明类,字段,方法等的访问修饰符。
例子:
package p1; //Class Course is having Default access modifier class Course{ void display() { System.out.println("Hello World!"); } }
接下来,让我们继续下一个类型,私有访问修饰符。
私有访问修饰符
声明为私有的方法或者数据成员只能在声明它们的类中访问。
鉴于以下事实,不能将顶级类或者接口声明为私有:
私有表示"仅在封闭类内部可见"。
"受保护"表示"在封闭类和任何子类内部仅是明显的"。
如果类具有私有构造函数,则无法从类外部创建该类的对象。
不能用私有访问修饰符标记类。
用private access修饰符表示一个类将意味着没有其他类可以到达它。这通常意味着我们无法通过任何想象力来利用该类。这样,专用访问修饰符就不会考虑类别。
注意:不能将类或者接口声明为私有。
语法:
public class Clock { private long time = 0; }
看一个示例,以获取有关此私有访问修饰符的清晰思路。
例子:
package p; class A { private void display(){ System.out.println("theitroad"); } } class B { public static void main(String args[]){ A obj = new A(); //trying to access private method of another class obj.display(); } }
该程序的输出为: error: display() has private access in A
obj.display();
希望你们对私有访问修饰符感到清楚。
接下来,让我们继续下一个类型,公共访问修饰符。
公共访问修饰符
使用关键字public指定公共访问修饰符。
公共访问修饰符在所有其他访问修饰符中具有广泛的范围。
声明为公共的类,方法或者数据成员可在程序的任何位置访问。对公共数据成员的范围没有限制。
语法:
package theitroad.co; public class PublicClassDemo { //Here I didnt mention any modifier so it acts as a default modifier public int myMethod(int x){ return x; } }
现在,看一个示例,以清楚地了解此公共访问修饰符。
例子:
package p1; public class A { public void display() { System.out.println("theitroad!"); } }
package p2; import p1.*; class B { public static void main(String args[]) { A obj = new A; obj.display(); } }
这就是有关Java中公共访问修饰符的所有内容。
让我们继续前进到Java中的下一个访问修饰符,即受保护的访问修饰符。
受保护的访问修饰符
使用关键字protected指定受保护的访问修饰符。
声明为受保护的方法或者数据成员可在同一包中或者在不同包中的子类中访问。
受保护的成员只能在子类或者派生类中访问。
语法:
package packageFourProtected; public class ProtectedClassFour { protected int myMethod(int a){ return a; } }
让我们看一个例子。
例子:
spackage p1; //Class A public class A { protected void display() { System.out.println(" Java Certification Training"); } }
package p2; import p1.*; //importing all classes in package p1 //Class B is subclass of A class B extends A | { public static void main(String args[]) { B obj = new B(); obj.display(); } }
这是我们需要了解Java中访问修饰符下的不同方法的所有内容。
让我们继续下一个主题。
具有方法覆盖的访问修饰符
如果要覆盖的是任何方法,则在子类中声明的被覆盖的方法一定不能是限制性的。
看下面的例子。
class A { protected void msg() { System.out.println("Hello java"); } } public class Simple extends A { void msg() { System.out.println("Hello java"); } //C.T.Error public static void main(String args[]) { Simple obj=new Simple(); obj.msg(); } }
默认修饰符比受保护的更严格。
这就是为什么存在编译时错误的原因。
访问控制和继承
如果以防万一,我们创建了某个类的子类,则该子类中的方法所分配的访问修饰符不能比超类少。
例如,如果超类中的方法是公共的,那么它在子类中也必须是公共的。如果超类中的方法是受保护的,则在指定的子类中它必须是受保护的或者公共的。
声明为private的方法根本不会继承。