鍍金池/ 教程/ Java/ Java訪問修飾符
Java for循環(huán)
Java接口
Java是什么?
Java命名約定
java中方法重載和方法重寫的區(qū)別
Java運算符
Java抽象類
Java快速入門
Java實例初始化程序塊
Java靜態(tài)綁定和動態(tài)綁定
Java do-while循環(huán)
Java對象克隆
Java Object類
Java聚合
Java繼承
Java this關(guān)鍵字
Java虛擬機內(nèi)部體系結(jié)構(gòu)
Java構(gòu)造器(構(gòu)造方法)
Eclipse安裝和配置
Java多態(tài)
Java方法重載
Java while循環(huán)
Java教程
Java按值調(diào)用和引用調(diào)用
Java strictfp關(guān)鍵字
Java封裝
Java語言特點
Java數(shù)組
Java instanceof運算符
Java包裝類
Java命令行參數(shù)
Java包
Java面向?qū)ο螅∣OP)概念
簡單Java程序
Java基礎(chǔ)實例程序
Java對象和類
Java continue語句
Java抽象類和接口的區(qū)別
C++ VS Java比較
Java if/else語句
Java switch語句
Java歷史
Java變量和數(shù)據(jù)類型
安裝Java環(huán)境(Linux)
Java JDK安裝和配置
Hello Java程序的內(nèi)部細節(jié)
Java break語句
Java方法重寫
Java Unicode編碼系統(tǒng)
怎么樣開始學習Java編程?
對象和類之間的區(qū)別
Java訪問修飾符
Java super關(guān)鍵字
Java注釋
JDK,JRE和JVM之間的區(qū)別
Java final關(guān)鍵字
Java static關(guān)鍵字

Java訪問修飾符

java中有兩種類型的修飾符:訪問修飾符和非修飾符。
java中的訪問修飾符指定數(shù)據(jù)成員,方法,構(gòu)造函數(shù)或類的輔助功能(范圍)。
一共有4種類型的java訪問修飾符:

  • private
  • default
  • protected
  • public

有許多非訪問修飾符,如:static, abstract, synchronized, native, volatile, transient等修飾符。這里,我們將只學習訪問修飾符。

private訪問修飾符

私有(private)訪問修飾符只能在類中訪問。

private訪問修飾符的簡單示例

在這個例子中,我們創(chuàng)建了兩個類:ASimple。 類包含私有數(shù)據(jù)成員和私有方法。 我們從類外訪問這些私有成員,所以會產(chǎn)生編譯時錯誤。

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();// 私有方法,不可以從外部類中直接訪問,因此有編譯錯誤
    }
}

1. private訪問修飾符

如果將類的構(gòu)造函數(shù)聲明為私有,則不能從類外部創(chuàng)建該類的實例。 例如:

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訪問修飾符

如果不使用任何修飾符,默認情況下將其視為default修飾符。default修飾符只能在包內(nèi)訪問。

default訪問修飾符示例

在這個例子中,我們創(chuàng)建了兩個包packmypack。從它的包外部訪問A類,因為一個類不是public的,所以它不能從包外部訪問。如下兩個類:A.javaB.java 代碼。

//save by A.java  
package pack;  
class A{  
    void msg(){System.out.println("Hello");}  
}

B.java 代碼的代碼如下 -

//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()是默認(default)的,所以它不能從包外部訪問。

3. protected訪問修飾符

protected訪問修飾符可以在包中和包外部訪問,但只能通過繼承。protected訪問修飾符可以應(yīng)用于數(shù)據(jù)成員,方法和構(gòu)造函數(shù)。 它不能應(yīng)用于類。

protected訪問修飾符的示例

在這個例子中,我們創(chuàng)建了兩個包packmypack。 A類的包是public的,所以可以從外部訪問包。 但是這個包的msg方法聲明為protected,因此只能通過繼承從類外面訪問它。如下兩個類:A.javaB.java 代碼。

//save by A.java  
package pack;

public class A {
    protected void msg() {
        System.out.println("Hello");
    }
}

B.java 代碼如下 -

//save by B.java  
package mypack;

import pack.*;

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

執(zhí)行上面代碼,得到如下結(jié)果 -

Hello

4. public訪問修飾符

公共(public)訪問修飾符可隨處訪問。 它在所有其他修飾符中具有最廣泛的范圍。

public訪問修飾符示例

如下兩個類:A.javaB.java 代碼。

A.java 的代碼

//save by A.java  

package pack;

public class A {
    public void msg() {
        System.out.println("Hello");
    }
}

B.java 的代碼

//save by B.java  

package mypack;

import pack.*;

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

執(zhí)行上面的代碼,得到以下結(jié)果 -

Hello

理解所有java訪問修飾符

讓我們通過下面的一個簡單的表來理解訪問修飾符。

訪問修飾符 在類內(nèi) 在包內(nèi) 外部包只通過子類 外部包
Private Y N N N
Default Y Y N N
Protected Y Y Y N
Public Y Y Y Y

如果你要覆蓋任何方法,重寫的方法(即在子類中聲明)則不能聲明得更嚴格。

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();
    }
}

默認(default)修飾符比受保護的修飾符更嚴格。 這就是為什么有編譯時錯誤。


下一篇:Java包