访问修饰符
| 修饰符 | 当前类 | 同一包内 | 子孙类(同一包) | 子孙类(不同包) | 其他包 |
|---|---|---|---|---|---|
| public | Y | Y | Y | Y | Y |
| protected | Y | Y | Y | Y/N | N |
| default | Y | Y | Y | N | N |
| private | Y | N | N | N | N |
1、访问修饰符控制类、方法、属性的访问权限
2、外部类(顶层类)只能使用 public、default、static、abstract、final 修饰
3、内部类
(1)静态内部类、成员内部类可以使用四种访问修饰符
(2)局部内部类因为属于局部变量,所以不能使用访问修饰符
default
1、默认访问修饰符:不使用任何关键字
2、在同一包内可见,不使用任何修饰
3、使用对象:类、接口、变量、方法
4、使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的
5、接口里的变量都隐式声明为 public static final,而接口里的方法默认情况下访问权限为 public
private
1、私有访问修饰符:private
2、在同一类内可见
3、使用对象:变量、方法。 注意:不能修饰类(外部类)
4、私有访问修饰符是最严格的访问级别,所以被声明为 private 的方法、变量和构造方法只能被所属类访问,并且类和接口不能声明为 private
5、声明为私有访问类型的变量只能通过类中公共的 getter 方法被外部类访问
6、Private 访问修饰符的使用主要用来隐藏类的实现细节和保护类的数据
public
1、公有访问修饰符-public
2、对所有类可见
3、使用对象:类、接口、变量、方法
4、被声明为 public 的类、方法、构造方法和接口能够被任何其他类访问
5、如果几个相互访问的 public 类分布在不同的包中,则需要导入相应 public 类所在的包。
6、由于类的继承性,类所有的公有方法和变量都能被其子类继承
protected
1、对同一包内的类和所有子类可见
2、使用对象:变量、方法。 注意:不能修饰类(外部类)
3、可见性
(1)同一包内,普通类或子类都可以访问父类的 protected 成员
(2)不同包内,在子类中创建子类对象,可以访问父类的 protected 成员
(3)不同包内,在子类中,只有子类实例可以访问其从父类继承的 protected 方法,而在子类中不能访问父类实例(所调用)的 protected 方法
(4)不同包内,在子类中创建另一个子类的对象,不能访问公共父类的 protected 成员
(5)子类可以直接访问父类的 protected static 成员
(6)不论子类、父类是否在同一个包中,不在 protected 所在包的其他类,都不能通过子类、父类的对象访问 protected 成员
(7)不论是否在一个包内,父类中可以访问子类实例(对象)继承的父类 protected 修饰的方法(子父类访问权限特点:父类访问域大于子类)
package p1;
public class Father1 {
protected void f() {
}
}
package p1;
public class Son1 extends Father1 {
}
package p2;
public class Son2 extends Father1{
}
package p1;
public class Test {
public static void main(String[] args) {
Son1 son1 = new Son1();
son1.f(); // Compile OK
Son2 son = new Son2();
son2.f(); // Compile OK
}
}
(8)若子类与基类(父类)不在同一包中,父类中不可以使用子类实例调用(父类中没有)子类中特有的(自己的)protected 修饰的成员(因为没有满足同一包内和继承获得 protected 成员的关系)
package P1;
public class Test {
public static void main(String args[]) throws CloneNotSupportedException {
MyObject obj = new MyObject();
obj.clone(); // Compile Error -----(1)
}
}
package P2;
public class MyObject extends Test {
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}

浙公网安备 33010602011771号