Java訪問許可權控制符
阿新 • • 發佈:2021-12-01
4個
-
private 私有
-
public 公開
-
protected 受保護
-
預設(什麼都不寫) eg.
public class User{
// 私有的
private int id;
// 受保護的
protected int age;
// 公開的
public int weight;
// 預設的
String name;
}
2.以上的4個訪問控制權限:控制的範圍是什麼?
-
private 表示私有的,只能在本類中訪問
-
public 表示公開的,在任何位置都可以訪問
-
“預設”表示只能在本類,以及同包下訪問。
-
protected表示只能在本類、同包、子類中訪問。
訪問控制修飾符 | 本類 | 同包 | 子類 | 任意位置 |
---|---|---|---|---|
public | 可以 | 可以 | 可以 | 可以 |
protected | 可以 | 可以 | 可以 | 不行 |
預設 | 可以 | 可以 | 不行 | 不行 |
private | 可以 | 不行 | 不行 | 不行 |
範圍從大到小排序:public > protected > 預設 > private
3.訪問控制權限修飾符可以修飾什麼?
-
屬性(4個都能用)
-
方法(4個都能用)
-
類(
public
和預設
能用,其它不行。) -
介面(
public
和預設
能用,其它不行。)
注:介面和類只有public和預設可以用!
eg.
//錯誤: 此處不允許使用修飾符private
/*
private class MyClass1{
}
*/
//錯誤: 此處不允許使用修飾符protected
/*
protected class MyClass1{
}
*/
package com.baidu;
public class User{
// 私有的
private int id;
// 受保護的
protected int age;
// 公開的
public int weight;
// 預設的
String name;
// 方法
public void m1(){}
private void m2(){}
void m3(){}
protected void m4(){}
// 靜態方法也可以。
public static void x(){}
private static void y(){}
static void z(){}
protected static void k(){}
}
class MyClass1{
}
同包:
package com.baidu;
public class Test01{
public static void main(String[] args){
User user = new User();
// private修飾的元素只能在本類中用。
//System.out.println(user.id);//報錯
System.out.println(user.age);
System.out.println(user.weight);
System.out.println(user.name);
}
不同包:
package com.baidu2; // 包變化了。
import com.baidu.User;
public class Test02{
public static void main(String[] args){
User user = new User();
// 錯誤:protected在這裡不行。
//System.out.println(user.age);
// 可以:公開的,在哪都行。
System.out.println(user.weight);
// 錯誤:“預設”在這裡也不行。
//System.out.println(user.name);
}
}
不同包且繼承:
package com.baidu3; // 包變化了。
import com.baidu.User;
// User在com.baidu包下。
// Vip在com.baidu3包下。
// User和Vip不在同一個包下。
// 但是Vip是User的子類。
public class Vip extends User{
//例項方法
public void shopping(){
// this表示當前物件
// protected可以
System.out.println(this.age);
// 錯誤:預設 不行。
//System.out.println(this.name);//報錯
}
}