【JAVA入门】Day12 - 权限修饰符
文章目录
- 【JAVA入门】Day12 - 权限修饰符
- 一、private
- 二、空着不写
- 三、protected
- 四、public
- 五、权限修饰符的使用规则
权限修饰符是用来控制一个成员能够被访问的范围的。
权限修饰符可以修饰成员变量、方法、构造方法、内部类。
public class Student {
private String name;
private int age;
}
在 Java 中一共四种权限修饰符,它们的作用范围从小到大为: private < 空着不写 < protected < public 。
一、private
如果一个变量被 private 修饰,那么它在同一个类中可以使用,在同一个包中的其他类不能使用,在不同包下的子类也无法使用,在不同包下的无关类更不能使用。
- 在同一个包 XiuShiFu 中,另一个 Animal 类生成的对象 a,无法直接使用 name。
package JavaStudy2.XiuShiFu;
public class Animal {
private String name;
public void show() {
System.out.println(name); //在自己类中可以直接使用 name
}
}
package JavaStudy2.XiuShiFu;
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
// System.out.println(a.name); 报错
}
}
- 现有另一个包 AnotherBag,其下有一个类 Dog 继承了 XiuShiFu 包(用 import 语句导入)里的 Animal,此时继承过来的 name,也无法被使用。
package JavaStudy2.AnotherBag;
import JavaStudy2.XiuShiFu.Animal;
public class Dog extends Animal {
public void show() {
//System.out.println(name); 报错
}
}
- 现在另一个包 AnotherBag 中创建了一个新的 Test 类(无关类),然后导入 XiuShiFu 包里的 Animal 类,此时创建的 Animal 对象 a,还是无法使用 name。
package JavaStudy2.AnotherBag;
import JavaStudy2.XiuShiFu.Animal;
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
//System.out.println(a.name); 报错
}
}
二、空着不写
空着不写叫默认,默认情况下,在同一个类中可以使用,在同一个包其他类中也可以使用,但在不同包下的子类和无关类中就无法使用。
- 在同一个包 XiuShiFu 中,另一个 Animal 类生成的对象 a,可以直接使用 name。
package JavaStudy2.XiuShiFu;
public class Animal {
String name;
public void show() {
System.out.println(name); //在自己类中可以直接使用 name
}
}
package JavaStudy2.XiuShiFu;
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
System.out.println(a.name);
}
}
- 现有另一个包 AnotherBag,其下有一个类 Dog 继承了 XiuShiFu 包(用 import 语句导入)里的 Animal,此时继承过来的 name,无法被使用。
package JavaStudy2.AnotherBag;
import JavaStudy2.XiuShiFu.Animal;
public class Dog extends Animal {
public void show() {
//System.out.println(name); 报错
}
}
- 现在另一个包 AnotherBag 中创建了一个新的 Test 类(无关类),然后导入 XiuShiFu 包里的 Animal 类,此时创建的 Animal 对象 a,也无法使用 name。
package JavaStudy2.AnotherBag;
import JavaStudy2.XiuShiFu.Animal;
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
//System.out.println(a.name); 报错
}
}
三、protected
这个词的意思是受保护的。受保护的在本类中能用,在同一个包其他类中也能用,在不同包下的子类还能用,但是无关类用不了。
- 在同一个包 XiuShiFu 中,另一个 Animal 类生成的对象 a,可以直接使用 name。
package JavaStudy2.XiuShiFu;
public class Animal {
protected String name;
public void show() {
System.out.println(name); //在自己类中可以直接使用 name
}
}
package JavaStudy2.XiuShiFu;
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
System.out.println(a.name);
}
}
- 现有另一个包 AnotherBag,其下有一个类 Dog 继承了 XiuShiFu 包(用 import 语句导入)里的 Animal,此时继承过来的 name,没有报错,可以被使用。
package JavaStudy2.AnotherBag;
import JavaStudy2.XiuShiFu.Animal;
public class Dog extends Animal {
public void show() {
System.out.println(name);
}
}
- 现在另一个包 AnotherBag 中创建了一个新的 Test 类(无关类),然后导入 XiuShiFu 包里的 Animal 类,此时创建的 Animal 对象 a,无法使用 name,报错。
package JavaStudy2.AnotherBag;
import JavaStudy2.XiuShiFu.Animal;
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
//System.out.println(a.name); 报错
}
}
四、public
public意思是公共的,公共的在以上提到的所有类中都能用。
- 在同一个包 XiuShiFu 中,另一个 Animal 类生成的对象 a,可以直接使用 name。
package JavaStudy2.XiuShiFu;
public class Animal {
public String name;
public void show() {
System.out.println(name); //在自己类中可以直接使用 name
}
}
package JavaStudy2.XiuShiFu;
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
System.out.println(a.name);
}
}
- 现有另一个包 AnotherBag,其下有一个类 Dog 继承了 XiuShiFu 包(用 import 语句导入)里的 Animal,此时继承过来的 name,没有报错,可以被使用。
package JavaStudy2.AnotherBag;
import JavaStudy2.XiuShiFu.Animal;
public class Dog extends Animal {
public void show() {
System.out.println(name);
}
}
- 现在另一个包 AnotherBag 中创建了一个新的 Test 类(无关类),然后导入 XiuShiFu 包里的 Animal 类,此时创建的 Animal 对象 a,可以使用 name,没有报错。
package JavaStudy2.AnotherBag;
import JavaStudy2.XiuShiFu.Animal;
public class Test {
public static void main(String[] args) {
Animal a = new Animal();
System.out.println(a.name);
}
}
五、权限修饰符的使用规则
在开发时,一般只使用 private 和 public。其中:
- 成员变量私有
- 方法公开
特例:如果方法中的代码是抽取其他方法中的共性代码,这个方法一般也设私有。