7.2 访问修饰符
目录
7.2.1 访问修饰符时什么
Java中的访问修饰符用于控制类、接口、构造函数、方法和数据成员(字段)的可见性和访问级别。
Java提供了四种访问修饰符:
访问修饰符 | 同一类内 | 同一包内 | 不同包的子类 | 不同包的非子类 | 适用对象 |
---|---|---|---|---|---|
public | 可见 | 可见 | 可见 | 可见 | 类、接口、变量、方法 |
protected | 可见 | 可见 | 可见 | 不可见 | 变量、方法 |
默认 | 可见 | 可见 | 不可见 | 不可见 | 类、接口、变量、方法 |
private | 可见 | 不可见 | 不可见 | 不可见 | 变量、方法 |
7.2.2 private关键字
- 访问权限:最高,可以被任何其他类访问。
- 适用范围:类、接口、构造器、方法和字段。
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关键字
- 访问权限:最低,只能被定义它的类内部访问。
- 适用范围:构造函数、方法和字段。
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 修饰的成员变量不能在同一个包中被访问。这里会报错:
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 修饰的成员变量不能在不同包的非子类中被访问。这里会报错:
package com.pack1;
import com.pack2.Example;
public class Subclass extends Example{
public void show() {
//System.out.println(privateVar);//不同包的子类不能访问 privateVar
//这里会报错
}
}
可以发现 private 修饰的成员变量不能在不同包的子类中被访问。这里会报错:
标签:pack2,子类,修饰符,Example,访问,com,public From: https://www.cnblogs.com/hweiling/p/18357376