首页 > 技术文章 > Java访问权限控制符

hty20010101 2021-12-01 13:37 原文

Java访问权限控制符

1.访问控制权限都有哪些?

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.访问控制权限修饰符可以修饰什么?

  1. 属性(4个都能用)

  2. 方法(4个都能用)

  3. public默认能用,其它不行。)

  4. 接口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);//报错
  }
 }

 

推荐阅读