个性化阅读
专注于IT技术分析

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

私有访问修饰符只能在类中访问。

私有访问修饰符的简单示例

在本例中,我们创建了两个类A和Simple。类包含私有数据成员和私有方法。我们从类外部访问这些私有成员,因此存在编译时错误。

class A{
private int data=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.java

package pack;
public class A{
public 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();
   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的约束更多。这就是为什么存在编译时错误的原因。

赞(0)
未经允许不得转载:srcmini » Java访问修饰符

评论 抢沙发

评论前必须登录!