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

对于java中访问权限的理解与解析

程序员文章站 2024-03-19 14:23:22
...

对于刚开始学习java的“程序员”来说,或者说是刚刚接触面向对象编程的人,对于四个访问权限的理解刚开始难免会有所困难,话不多说,进入正题,看我的总结:

1、首先呢,对于java的访问权限共有4个

private       默认default     protected     public

他们的权限范围也按照以上的顺序逐渐增大,解释一下默认default的类型,就是什么都不写,由系统默认


2、其次,用法:类前面允许使用两种,即 public 和 default(默认),类成员变量,类成员函数,实例成员变量,实例成员函数,4种都可以使用,都符合要求


3、理解:private (当前类访问权限)    default(包访问权限)   protected(子类访问权限)  public(公共访问权限)

private : 只允许被当前的类访问

default(默认)可以被当前的类,也可以被同一个包下的所有类访问

protected可以被当前的类访问,也可以被同一个包下的所有类访问,还可以被不同的包下的有继承实现关系的子类访问

public:可以被当前的类访问,也可以被同一个包的所有类访问,还可以被不同包下的类访问。。。。换言之,public 属于完全暴露,完全透明的权限。


4、文字看不懂,看看代码,帮助理解下。

被public修饰的类Persion1;

package encapsulation;

public class Persion1 {
	private static int priVai;
	protected static  int proVai;
	public static  int pubVai;
	static int defaultVai;
	private static  void priTest(){
		System.out.println("我是一个私有(当前类访问权限)的方法!");
	}
	protected static  void proTest(){
		System.out.println("我是一个保护(protected子类访问权限)的方法");
	}
	public static  void pubTest(){
		System.out.println("我是一个public(公共访问权限)的方法");
	}
	static void defaultTest(){
		System.out.println("我是一个默认(包访问权限)的方法");
	}
}

与Persion1在同一个包下;

package encapsulation;

public class Persion2 {
	public static void main(String[] args) {
		Persion1 p = new Persion1();
		//可以看出在同一个包下,调用public修饰的类的成员(变量和方法)只有   私有的   变量和方法不能被调用
		//同一个包下可以访问3种
		System.out.println(p.proVai);
		System.out.println(p.pubVai);
		System.out.println(p.defaultVai);
		p.pubTest();
		p.proTest();
		p.defaultTest();
	}
}

与Persion1在不同的包下;

package encapsulation2;

import encapsulation.Persion1;

public class Persion3 {
	public static void main(String[] args) {
		Persion1 p = new Persion1();
		//可以看出在不同的包下,调用     public修饰的类   的成员(变量和方法)只有   共有的(public)   变量和方法能被调用
		System.out.println(p.pubVai);
		p.pubTest();
	}
}

与Persion1在不同的包下,但继承了Persion1,成为其子类;

package encapsulation2;

import encapsulation.Persion1;

public class Persion4 extends Persion1 {
	public static void main(String[] args) {
		//不同的包下,在有继承的关系的情况下,能访问public 和 protected 修饰的变量和方法
		//注意不要用父类的一个对象在这里调用,那是父类的作用域 问题!!!
		System.out.println(pubVai);
		System.out.println(proVai);
		pubTest();
		proTest();
	}
}


Persion10是默认访问权限的class;

package encapsulation;

class Persion10 {
	private static int priVai;
	protected static  int proVai;
	public static  int pubVai;
	static int defaultVai;
	private static  void priTest(){
		System.out.println("我是一个私有(当前类访问权限)的方法!");
	}
	protected static  void proTest(){
		System.out.println("我是一个保护(protected子类访问权限)的方法");
	}
	public static  void pubTest(){
		System.out.println("我是一个public(公共访问权限)的方法");
	}
	static void defaultTest(){
		System.out.println("我是一个默认(包访问权限)的方法");
	}
}


和Persion10在同一个包下;
package encapsulation;

public class Persion20 {
	public static void main(String[] args) {
		Persion1 p = new Persion1();
		//可以看出在同一个包下,调用public修饰的类的成员(变量和方法)只有   私有的   变量和方法不能被调用
		//同一个包下可以访问3种
		System.out.println(p.proVai);
		System.out.println(p.pubVai);
		System.out.println(p.defaultVai);
		p.pubTest();
		p.proTest();
		p.defaultTest();
	}
}

和Persion10在不同的包下;
package encapsulation2;

import encapsulation.Persion1;

public class Persion30 {
	public static void main(String[] args) {
		Persion1 p = new Persion1();
		//可以看出在不同的包下,调用     public修饰的类   的成员(变量和方法)只有   共有的(public)   变量和方法能被调用
		System.out.println(p.pubVai);
		p.pubTest();
	}
}


和Persion10在不同的包下,想继承Persion10 却不能(原因如下)
package encapsulation2;
//以下的两行代码是错误的:

//import encapsulation.Persion10;

//class Persion40 extends Persion10 {

//}

/*错误的原因:
   The type encapsulation.Persion10 is not visible	
   default只是包的访问权限!!
 */
 

下面这个是一个简单的布局

对于java中访问权限的理解与解析



这东西还是自己亲手试一下,脑海里立马就清楚了 ^   -   ^对于java中访问权限的理解与解析对于java中访问权限的理解与解析对于java中访问权限的理解与解析





相关标签: java访问权限

上一篇: ADS8695 STM32 硬件SPI驱动

下一篇: