Java访问修饰符

1 什么是Java的访问修饰符

Java中有两种类型的修饰符:访问修饰符非访问修饰符

Java中的访问修饰符指定字段,方法,构造方法或类的可访问性或范围。我们可以添加访问修饰符来更改字段,构造方法,方法和类的访问级别。

Java访问修饰符有四种类型:

  1. private:私有修饰符的访问级别仅在该类之内。不能从当前类的外部访问它。
  2. default:默认修饰符的访问级别仅在包中。不能从当前包的外部访问它。如果你未指定任何访问级别,则默认值就是default。
  3. protected:受保护的修饰符的访问级别是当前类的子类(子类可以放在当前包下或当前包外部)。如果不创建子类,则无法从包外部对其进行访问。
  4. public:公共修饰符的访问级别是“无处不在”。可以从类内部,类外部,包内部和包外部访问它。

有许多非访问修饰符,例如static, abstract, synchronized, native, volatile, transient等。本章节仅仅学习访问修饰符。

2 Java访问修饰符的作用范围

访问修饰符 当前类 当前包 子类(外部包) 外部包
private Y N N N
default Y Y N N
protected Y Y Y N
public Y Y Y Y

3 private

private访问修饰符仅可在当前类中访问。

3.1 private修饰符的示例

在本示例中,我们创建了两个类A和Simple。一个类包含私有字段和私有方法。我们从类外部访问这些私有成员,会发生编译时错误。

/**
 * 一点教程网:http://www.yiidian.com
 */
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);//编译错误
        obj.msg();//编译错误
    }
}  

3.2 私有构造方法的作用

如果将任何类构造方法设置为私有,则不能从类外部创建该类的实例。例如:

/**
 * 一点教程网:http://www.yiidian.com
 */
class A{
    private A(){}//私有构造方法
    void msg(){System.out.println("Hello java");}
}
public class Simple{
    public static void main(String args[]){
        A obj=new A();//编译错误 
    }
}  

4 default

如果你不使用任何修饰符,则默认情况下会将其视为默认(default)修饰符。default修饰符只能在当前包中访问。不能从当前包的外部访问它。它提供了比private更多的可访问性。但是,它比protected的和public更有限制性。

4.1 default修饰符的示例

在本示例中,我们创建了两个包pack和mypack。由于A类的修饰符为default,所以B类无法从包外部访问A类。

/**
 * 一点教程网:http://www.yiidian.com
 */
//A.java  
package pack;
class A{
    void msg(){System.out.println("你好");}
}
//save by A.java  
package pack;  
public class A{  
protected void msg(){System.out.println("你好");}  
}  

在上面的示例中,类A的范围及其方法msg() 是default,因此无法从程序包外部对其进行访问。

5 protected

protected访问修饰符的范围是包内包外,但必须通过继承才能访问。

可以将protected访问修饰符应用于字段,方法和构造方法。它不能应用于类。

它提供了比default修饰符更多的可访问性。

5.1 proctected修饰符的示例

/**
 * 一点教程网:http://www.yiidian.com
 */
//A.java  
package pack;
public class A{
    protected void msg(){
        System.out.println("你好");
    }
}
/**
 * 一点教程网:http://www.yiidian.com
 */
//B.java
package mypack;
import pack.*;

class B extends A{
    public static void main(String args[]){
        B obj = new B();
        obj.msg();
    }
}  

输出结果为:

你好

6 public

public访问修饰符是所有地方。在所有其他修饰符中,它的作用范围最广。

6.1 public修饰符的示例

/**
 * 一点教程网:http://www.yiidian.com
 */
//A.java
package pack;
public class A{
    public void msg(){
        System.out.println("你好");
    }
}  
/**
 * 一点教程网:http://www.yiidian.com
 */
//.java
package mypack;
import pack.*;

class B{
    public static void main(String args[]){
        A obj = new A();
        obj.msg();
    }
} 

输出结果为:

你好

 

一点教程,一个分享编程知识的公众号。跟着站长一起学习和进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

在公交、在地铁、在厕所都可以阅读,随时随地涨姿势。

文章不涉及代码,不烧脑细胞,人人都可以学习。

当你决定关注「一点教程」,你已然超越了90%的程序员!

一点教程二维码