访问修饰符

7.2 访问修饰符


7.2.1 访问修饰符时什么

Java中的访问修饰符用于控制类、接口、构造函数、方法和数据成员(字段)的可见性和访问级别。

Java提供了四种访问修饰符:

访问修饰符 同一类内 同一包内 不同包的子类 不同包的非子类 适用对象
public 可见 可见 可见 可见 类、接口、变量、方法
protected 可见 可见 可见 不可见 变量、方法
默认 可见 可见 不可见 不可见 类、接口、变量、方法
private 可见 不可见 不可见 不可见 变量、方法

7.2.2 private关键字

  • 访问权限:最高,可以被任何其他类访问。
  • 适用范围:类、接口、构造器、方法和字段。

img

com.pack2 包中:

package com.pack2;
 
public class Example {
 
	//public 修饰字段(成员变量),以此为例
	public int publicVar;
 
	public void example() {
		System.out.println(publicVar);//同一个类中可以访问 publicVar
	}
}
package com.pack2;
 
public class SamePackage {
	public Example e = new Example();
 
	public void show() {
		System.out.println(e.publicVar);//可以在同一个包中被访问 publicVar
	}
}

这里可以看到同一类中可以访问 public 修饰的成员变量,同一个包中可以访问 public 修饰的成员变量。

com.pcak1 包中:

package com.pack1;
 
import com.pack2.Example;
 
public class NotSamePackNotSubclass {
	public static void main(String[] args) {
		Example e1 = new Example();
		System.out.println(e1.publicVar);//在不同包的非子类中访问 publicVar
	}
}
package com.pack1;
 
import com.pack2.Example;
 
public class Subclass extends Example {
 
	public void foo() {
		System.out.println(publicVar);//在不同包的子类中访问 publicVar
	}
}

这里可以看到在不同包的非子类和子类中都可以访问到 public 修饰的成员变量。

7.2.3 public关键字

  • 访问权限:最低,只能被定义它的类内部访问。
  • 适用范围:构造函数、方法和字段。

img

com.pack2 包中:

package com.pack2;
 
public class Example {
	//private 修饰的成员变量
	private int privateVar;
 
	public void show() {
		System.out.println(privateVar);//同一个类中可以访问 privateVar
	}
}

可以发现 private 修饰的成员变量只能在同一个类中被访问。

package com.pack2;
 
public class SamePackage {
	Example example = new Example();
 
	public void show() {
		//System.out.println(example.privateVar);//同一个包中不能访问 privateVar
		//这里会报错
	}
}

可以发现 private 修饰的成员变量不能在同一个包中被访问。这里会报错:

img

com.pcak1 包中:

package com.pack1;
 
import com.pack2.Example;
 
public class NotSamePackNotSubclass {
	public static void main(String[] args) {
		Example example = new Example();
		//System.out.println(example.privateVar);//不同包的非子类不能访问 privateVar
		//这里会报错
	}
}

可以发现 private 修饰的成员变量不能在不同包的非子类中被访问。这里会报错:

img

package com.pack1;
 
import com.pack2.Example;
 
public class Subclass extends Example{
	public void show() {
		//System.out.println(privateVar);//不同包的子类不能访问 privateVar
		//这里会报错
	}
}

可以发现 private 修饰的成员变量不能在不同包的子类中被访问。这里会报错:

img

posted @ 2024-08-14 14:33  青城山下写代码1010  阅读(26)  评论(0)    收藏  举报