Skip to content

访问控制权限

对于封装性,实际上之前只讲解了 private ,而封装性如果要想讲解完整,必须结合 4 种访问权限来看,这 4 种访问权限的定义如表所示。

image-20240928130421689

对于表,可以简单理解为:private 只能在一个类中访问;default 只能在一个包中访问;protected 在不同包的子类中访问;public 为所有都可以。

现在对于 privatedefaultpublic 都已经有所讲解,所以本节重点来学习 protected ,通过下面代码进行学习。

java
package com.yootk.demoa ;
public class A {
	protected String info = "Hello" ;	// 使用protected权限定义
}
package com.yootk.demoa ;
public class A {
	protected String info = "Hello" ;	// 使用protected权限定义
}
java
package com.yootk.demob;
import com.yootk.demoa.A;
public class B extends A { 		// 是A不同包的子类 
	public void print() {			// 直接访问父类中的protected属性
		System.out.println("A类的info = " + super.info);
	}
}
package com.yootk.demob;
import com.yootk.demoa.A;
public class B extends A { 		// 是A不同包的子类 
	public void print() {			// 直接访问父类中的protected属性
		System.out.println("A类的info = " + super.info);
	}
}

由于 B 类是 A 的子类,所以在 B 类中可以直接访问父类中的 protected 权限属性

java
package com.yootk.test;
import com.yootk.demob.B;
public class Test {
	public static void main(String args[]) {
		new B().print();
	}
}
package com.yootk.test;
import com.yootk.demob.B;
public class Test {
	public static void main(String args[]) {
		new B().print();
	}
}

本程序直接导入了 B 类,而后实例化对象调用 print() 方法,而在 print() 方法中利用 super.info 直接访问了父类中的 protected 权限属性。

错误的 protected 访问

如果要在 com.yootk.test 包中直接利用 Test 主类访问 A 中的属性,由于其不是一个包,也不存在继承关系,所以将无法访问。

java
package com.yootk.test;
import com.yootk.demoa.A;
public class Test {
	public static void main(String args[]) {
		A a = new A();
		System.out.println(a.info);			// 错误:无法访问
	}
}
package com.yootk.test;
import com.yootk.demoa.A;
public class Test {
	public static void main(String args[]) {
		A a = new A();
		System.out.println(a.info);			// 错误:无法访问
	}
}

本程序在进行编译时会直接提示用户,infoprotected 权限,所以被直接访问。

如何选择权限?

回答:根据结构选择。

实际上,给出的 4 种权限中,有 3 种权限(private、default、protected)都是对封装的描述,也就是说面向对象的封装性现在才算是真正讲解完整。从实际的开发使用来讲,几乎不会使用到 default 权限,所以真正会使用到的封装概念只有两个权限: private、protected。对于访问权限,初学者要把握以下两个基本使用原则即可。

  • 属性声明主要使用 private 权限;
  • 方法声明主要使用 public 权限。

用心去做高质量的编程学习内容网站,欢迎star ⭐让更多人发现!