Java访问修饰符

有两种类型的修饰符在Java:访问修饰符和non-access修饰符。
用Java访问修饰符指定字段的可访问性或范围,方法,构造函数或类。我们可以改变字段的访问级别,构造函数,通过应用方法和类的访问修饰符。
有四种类型的Java访问修饰符:

  1. private私人:私人的访问级别修改器只是在类。它不能从外部类访问。
  2. default默认值:一个默认的访问级别的修饰符只在包中。不能从包的外部访问它。如果你不指定任何访问级别,它将默认。
  3. protected保护:保护修饰符的访问级别是在外面的包和包通过子类。如果你不使子类,它不能从包的外部访问。
  4. public公众:公共修饰词无处不在的访问级别。它可以从内部访问类,在类外,在包和外部包。
有许多non-access修饰符,如static,abstract、asynchronous,local等等。在这里,我们要学习访问修饰符。
理解Java访问修饰符
让我们了解Java的访问修饰符由一个简单的表。
访问修饰符内部类内包以外包的子类外面的包装
PrivateYNNN
默认的YYNN
ProtectedYYYN
PublicYYYY
1) Private
私有访问修饰符只能在类中访问。
私有访问修饰符的简单示例
【Java访问修饰符】在本例中,我们创建了两个类A和Simple。类包含私有数据成员和私有方法。我们从类外部访问这些私有成员,因此存在编译时错误。
class A{ private int data=http://www.srcmini.com/40; private void msg(){System.out.println("Hello java"); } }public class Simple{ public static void main(String args[]){ A obj=new A(); System.out.println(obj.data); //Compile Time Error obj.msg(); //Compile Time Error } }

私人构造器的角色
如果将任何类构造函数设为私有,则无法从类外部创建该类的实例。例如:
class A{ private A(){}//private constructor void msg(){System.out.println("Hello java"); } } public class Simple{ public static void main(String args[]){ A obj=new A(); //Compile Time Error } }

注意:除嵌套类外,类不能是私有的或受保护的。2) Default
如果你不使用任何修饰符,默认情况下它被视为默认值。默认的修饰符只能在包中访问。不能从包外部访问它。它提供了比私有更多的可访问性。但是,它比受保护的、公共的限制更多。
默认访问修饰符的示例
在本例中,我们创建了两个package pack和mypack。我们从类的包外部访问它,因为类不是公共的,所以不能从包外部访问它。
//save by A.java package pack; class A{ void msg(){System.out.println("Hello"); } }

//save by B.java package mypack; import pack.*; class B{ public static void main(String args[]){ A obj = new A(); //Compile Time Error obj.msg(); //Compile Time Error } }

在上面的例子中,类A的作用域及其方法msg()是默认的,因此不能从包外部访问它。
3) Protected
受保护的访问修饰符可在包内和包外访问,但只能通过继承访问。
受保护的访问修饰符可以应用于数据成员、方法和构造函数。它不能应用到课堂上。
它提供了比默认修改器更多的可访问性。
受保护的访问修饰符的示例
在本例中,我们创建了两个包pack和mypack。类包包是公共的,因此可以从包外部访问。但是这个包的msg方法被声明为受保护的,所以只能通过继承从类外部访问它。
//save by A.java package pack; public class A{ protected void msg(){System.out.println("Hello"); } }

//save by B.java package mypack; import pack.*; class B extends A{ public static void main(String args[]){ B obj = new B(); obj.msg(); } }

Output:Hello

4) Public
公共访问修饰符在任何地方都是可访问的。在所有其他修饰词中,它的范围最广。
公共访问修饰符的示例
//save by A.javapackage pack; public class A{ public void msg(){System.out.println("Hello"); } }

//save by B.javapackage mypack; import pack.*; class B{ public static void main(String args[]){ A obj = new A(); obj.msg(); } }

Output:Hello

具有方法覆盖的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(); } }

默认的修饰符比protected的约束更多。这就是为什么存在编译时错误的原因。

    推荐阅读