data:2020/2/17
四种访问修饰符
Java面向对象的基本思想之一是封装细节并且公开接口。java语言采用访问控制修饰符来控制类及类的方法和变量的访问权限,从而向使用者暴露接口,但隐藏实现细节,访问控制符分为4种级别:
public
用public修饰的类、类属变量及方法,包内及包外的任何类(包括子类和普通类)均可以访问
protected
用protected修饰的类、类属变量及方法,包内的任何类及包外那些继承了该类的子类才能访问,protected重点突出继承
dafault
如果一个类、类属变量及方法没有用任何修饰符(即没有用public、protected、private中任何一种修饰),则其访问权限为default(默认访问权限)。
默认访问权限的类、类属变量及方法,包内的任何类(包括继承了此类的子类)都可以访问它,而对于包外的任何类都不能访问它(包括包外继承了此类的子类),default重点突出包
private
用private修饰的类、类属变量及方法,只有本类可以访问,而包内包外任何类均不能访问它
访问级别 | 访问控制修饰符 | 同类 | 同包不同类(不含子类) | 同包子类 | 不同包不同类(不含子类) | 不同包子类 |
---|---|---|---|---|---|---|
公开 | public | √ | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | – | √ |
默认 | default | √ | √ | √ | – | – |
私有 | private | √ | – | – | – | – |
小结:
protected重点突出继承,只要是子类,就算在不同的包中也可以访问
default重点突出包,只能在相同的包中的类才可以访问
protected属于子类限制修饰符,而default属于包限制修饰符
内部类
内部类(内部定义普通类、抽象类、接口的统称)是指一种嵌套的结构关系,即在一个类的内部除了属性和方法外还可以继续定义一个类结构,这样就使得程序的结构定义更加灵活
内部类特点:
1.内部类可以直接访问外部类成员,包括私有
2.外部类需要访问内部类成员,必须创建对象,可以在外部类中创建一个方法,然后方法里创建内部类对象调用内部类成员
3.外部类.内部类名 对象名 = 外部类对象.内部类对象
(Outer.lnner oi = new Outer().new lnner())
4.静态内部类,因为之前说了,可以直接用类名访问静态类里面的方法,所以:外部类.内部类对象名 = 外部类名.内部类对象,也就是
(Outer.lnner oi = new Outer.lnner())
5.私有内部类:对于成员内部类得私有使用,private,只能被当前类的方法访问,所以可以在外部类创建一个方法,创建内部类对象然后使用内部类方法
6.内部类获取外部类成员,采用 外部类名.this.外部类成员
7.局部内部类:定义在类的方法中的类,局部内部类在访问他所在的方法中的局部变量时必须用finnal修饰,因为方法结束后就弹栈了,变量也弹出去了,但是类还在堆里,还要用到变量,所以加个finnal将变量放到方法区常量池里(jdk1.8不需要加finnal了,如果加了finnal就有bug)
8.匿名内部类:也是局部内部类的一种,必须写在方法里,本质是一个继承了该类(一般是抽象类)或者实现了该接口的子类匿名对象,匿名内部类最好只针对只有一个方法的接口或者类,有固定的格式