欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

17.访问权限修饰符

程序员文章站 2022-03-21 17:40:50
...

访问权限修饰符:

1. 有哪些访问权限修饰?

一共四个

  1. private
  2. protected
  3. public
  4. 默认//什么都没有

2.各个访问权限修饰符的控制范围?

  1. private修饰的是私有的,只允许在本类中访问。

同一包下:(private只要不是同一个类就不能直接访问)

package com.study;
public class User{
	//私有
	private int age;
	//受保护的
	protected int weight;
	//公开的
	public String name;
	//默认的
	String height;
}
package com.study;
public class Test01{
	public static void main(String[] args){
		User u = new User();
		//错误: age 在 User 中是 private 访问控制
		//System.out.println(u.age);
		System.out.println(u.weight);
		System.out.println(u.name);
		System.out.println(u.height);
	}
}

可以看出,同一包下,protected/public/默认还不能进行区分,下面在不同包下分析:

  1. 在不同包中,public修饰的仍能正常访问——public表示公开的,在任何位置都可以访问

当Test02和User在不同包下时,protected和默认修饰的都不能访问。还是没法区分。

package com.study.chen;
import com.study.User;
public class Test02{
	public static void main(String[] args){
	User u1 = new User();
	//错误: weight 在 User 中是 protected 访问控制
	System.out.println(u1.weight);
	System.out.println(u1.name);
	//错误: height在User中不是公共的; 无法从外部程序包中对其进行访问
	System.out.println(u1.height);
	}

}
  1. protected在继承的子类中可以访问,默认的只能在同包下访问

    User在com.study包下。
    Vip在com.chen包下。
    User和Vip不在同一个包下。
    但是Vip是User的子类。

package com.chen;
import com.study.*;
public class Vip extends User{
	public void doSome(){
		System.out.println(this.weight);
		System.out.println(this.name);
		//错误: height在User中不是公共的; 无法从外部程序包中对其进行访问
		System.out.println(this.height);
	}
}

综上,总结:

访问权限如下:

修饰符 本类 同包 子类 任意位置
private 可以 不行 不行 不行
protected 可以 可以 可以 不行
public 可以 可以 可以 可以
默认 可以 可以 不行 不行

public >protected>默认>private

3.访问修饰符可以修饰什么?

属性(4个都能用)
方法(4个都能用)
类(public和默认能用,其它不行。)
接口(public和默认能用,其它不行。)

package com.chen;
import com.study.*;
public class Test03{
	//访问修饰符修饰属性
	private int age;
	protected int year;
	int month;
	public int day;
	//访问修饰符修饰方法,静态方法也可以
	public void f(){}
	protected void g(){}
	void k(){}
	private void l(){}
}
//错误: 此处不允许使用修饰符protected
/*protected class A{
}
*/

// 错误: 此处不允许使用修饰符private
/*
private class A{
}
*/
class A{
}
//接口同上

//公共类需要有自己的java文件来声明
//错误: 类 B 是公共的, 应在名为 B.java 的文件中声明
/*public class B{
}
*/
相关标签: 学习