17.访问权限修饰符

访问权限修饰符:

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{
}
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值