java自学日记no.7

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.匿名内部类:也是局部内部类的一种,必须写在方法里,本质是一个继承了该类(一般是抽象类)或者实现了该接口的子类匿名对象,匿名内部类最好只针对只有一个方法的接口或者类,有固定的格式

发布了38 篇原创文章 · 获赞 4 · 访问量 837

猜你喜欢

转载自blog.csdn.net/Hide111/article/details/104356626