猿教程 Logo

java 访问修饰符

java中有两种类型的修饰符:访问修饰符和非访问修饰符。

java中的访问修饰符指定数据成员,方法,构造函数或类的辅助功能(范围)。

有4种类型的java访问修饰符:

  1. private

  2. default

  3. protected

  4. public

有许多非访问修饰符,如static, abstract, synchronized, native, volatile, transient 等。这里,我们将学习访问修饰符。


1)private访问修饰符

private访问修饰符只能在类中访问。

private访问修饰符的简单示例

在这个例子中,我们创建了两个类A和Simple。 类包含private数据成员和private方法。 我们从类外访问这些private成员,所以有编译时错误。

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
   }
}

private构造函数的作用

如果你使任何类的构造函数为private,你不能从类外部创建该类的实例。 例如:

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
 }
}

注意:类不能是private或protected,除非嵌套类。


2)默认访问修饰符

如果不使用任何修饰符,它将被默认为默认。 默认修饰符只能在包内访问。

默认访问修饰符的示例

在这个例子中,我们创建了两个包pack和mypack。 我们从它的包外部访问A类,因为一个类不是public的,所以它不能从包外部访问。

相关实例:

//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访问修饰符

protected访问修饰符可以在包中和包外部访问,但只能通过继承。

protected访问修饰符可以应用于数据成员,方法和构造函数。 它不能应用于类。

protected访问修饰符示例

在这个例子中,我们创建了两个包pack和mypack。 A类的包是公开的,所以可以从外部访问包。 但是这个包的msg方法声明为protected,因此只能通过继承从类外面访问它。

相关实例:

//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访问修饰符可随处访问。 它在所有其他修饰符中具有最广泛的范围。

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访问修饰符

让我们通过一个简单的表来理解访问修饰符。

Access Modifier在类内内包装外部包只通过子类外包装
PrivateYNNN
DefaultYYNN
ProtectedYYYN
PublicYYYY

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

默认修饰符比受保护的修饰符更严格。 这就是为什么有编译时错误。


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Java/java-access-modifiers.html