小言_互联网的博客

java013:内部类

399人阅读  评论(0)

一,内部类:
内部类就是一个类中又出现了一个类。
学习内部类,主要是学习它如何实例化,如何访问他外部类的属性和方法
分类:
1内部类
2静态内部类
3局部内部类
4匿名内部类

class Person{
class Teacher{   //这就是个内部类
}
}


1,内部类:
每一个内部类都有一个指向它外部对象的引用


javap是反编译,这代表反编译一个内部类

如何在外部类之外实例化内部类?如何访问内部类同名的外部类变量?
实例化内部类必须借助外部类对象的引用

内部类(包括静态内部类)都可以被public,protected,private,和默认,等四种访问修饰符修饰
内部类可以全盘接收外部类的内容(甚至那些私有的,private修饰的,并且能直接访问)
所以内部类的强大之处就是解决了java继承中的单继承问题
多个内部类实现对外部内的继承。
2,静态内部类:
定义静态内部类:在定义内部类的时候,可以在其前面加上一个权限修饰符static。此时这个内部类就变为了静态内部类。
通常称为嵌套类,当内部类是static时,意味着:
[1]要创建嵌套类的对象,并不需要其外围类的对象;
[2]不能从嵌套类的对象中访问非静态的外围类对象(不能够从静态内部类的对象中访问外部类的非静态成员);

3,局部内部类:(方法内部类)定义在外部类方法中的局部位置,与访问方法中的局部变量相似,可以通过调用方法进行访问。
局部内部类不能被4种访问修饰符修饰(public ,private,protected,和默认),它前面不写修饰符,不是代表修饰符是默认的,而是代表没有修饰符。
没有局部静态内部类。
a,局部内部类的实例化只在局部内部类中,出了这个范围会报错

注意:当局部内部类访问了该方法的局部变量时,该变量必须被final修饰,在jdk1.8之后系统已经屏蔽了(作者已经帮你解决了,帮你封装了)

4,匿名内部类:就是没有名字的内部类,是java中的另一种继承方式
作用:解决单继承问题
格式:

new 类名/接口/抽象类(){
}

例如:

new Interface(){
}

思考:匿名内部类中可不可以有构造器?
不行,构造器的格式是

class 类名{
}

匿名内部类连类名都没有,怎么有构造器

匿名内部类中能不能再有内部类,如果可以有,如何实例化?
可以,但是只能在作用域访问内实例化 ,出了作用域访问会报错,和局部内部类一样了


转载:https://blog.csdn.net/weixin_44699728/article/details/89438667
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场