Java中4种访问修饰符
private:私有的 只能被该类的对象访问 不能被子类访问
protected:介于private与public中间 被protected修饰的属性只能被类本身的方法和子类访问,子类也能访问子类跨包也可访问
default:默认的 只支持在一个包中访问
public | 对任何类都ok | 开放 |
---|---|---|
private | 对当前类都可以访问 | 封闭 |
protected | 当前包下.其他包不行(除非子类) | |
package | 当前包下 |
修饰符 | 类内部 | 同一个包 | 子类 | 任何地方 |
---|---|---|---|---|
private | YES | |||
default(什么也不写) | YES | YES | ||
protected | YES | YES | YES | |
public | YES | YES | YES | YES |
Java中的访问修饰符用来控制类,静态变量,静态方法,成员变量,成员方法的访问权限。
为了方便描述,后面简称为变量和方法
在java中有三个访问修饰符,四种访问权限
public class User{ private long id; public long getId(){ return id; } public void setId(long id){ this.id=id; } }
先说最容易理解
也是用的最多的两种权限 public和private
public是最大权限 代表可以被任意访问
private是最小权限 代表只能由类自己访问
我们经常将成员变量 设置为private 然后选择性地提供public方法 以供外部访问成员变量
public class Father{ protected int num=1; protected int cal(){ return num<<1; } } class Son extends Father{ public son(){ num=cal(); } }
再来说一下protected权限 被protected修饰符修饰的成员变量和方法表示对相同包和其子类可见
protected多用于父类 定义好方法模板 供子类去实现自己的逻辑 设计模式中的模板方法 就可以通过protected实现
public class User{ long id; void f(){} }
最后我们说一下默认权限
默认权限没有对应的权限修饰符
当变量或方法没有被权限修饰符修饰时 ,就属于默认权限
默认权限表示对相同包内可见
默认权限用得比较少
我们在声明变量和方法时,一般都会指定具体的修饰符,这里要注意接口中的方法 只能使用public权限 除了public外 不能加其他权限修饰符
public interface Interface{ //public 可省略 public void f1(); //public 权限 void f2(); }
由于只能加public 所以接口中的方法 可以省去权限修饰符 但省去了之后 依然是public权限 而不是默认权限
public class A{} class B{}
刚才我们说的都是变量和方法 再来说一下类 对于类来说只可以使用 public权限和默认权限 也就是只能选择
加public和不加public 一个Java文件中,只能有一个public类
public class Outter{ private class A{} class B{} protected class C{} public class D{} }
注意哦这里说的是普通类,不包含内部类 内部类可以理解为 成员变量或静态变量 既然算是变量 自然就可以使用四种访问权限 可以发现 访问权限这一块