1.内部类的定义与使用:在类内部进行其他类结构嵌套操作
实现一个简单的内部类:
对以上代码进行修改,在类外部实现内部类:
1.内部类的优点:
a.内部类与外部类可以方便的访问彼此的私有域(包含私有方法,私有属性)
b.内部类是另外一种封装(保护性),对外部的其他类隐藏---心脏包在人身体内
c.内部类可以实现java单继承的局限。&
d.内部类可以对同一包中的其他类隐藏起来
e.当我们想要定义一个回调函数却不想写大量代码的时候我们可以选择使用匿名内部类来实现
缺点:结构复杂
2.内部类和外部类的关系:
a.对于非静态内部类,内部类的创建需要依赖外部类对象,在没有外部类实例之前无法创建非静态内部类。
b.内部类是一个相对独立的个体,与外部类没有is-a关系
c.内部类可以直接访问外部类的元素(包含私有域)&,但是外部类不可以直接访问内部类元素,需要通过内部类的引用间接访问(也就是可以访问)。&
创建内部类方法(在外部类外部)
Ⅰ。创建非静态内部类
外部类 .内部类 内部类引用 = new 外部类().new 内部类();
eg:Outter.Inner in = new Outter().new Inner();
Ⅱ.创建静态内部类
外部类.内部类 内部类引用 = new 外部类.内部类();
Outter.Inner in = new Outter.Inner();
内部类的分类
1.成员内部类(类比成员方法)
a.成员内部类不能存在任何static变量或方法。
b.成员内部类是依附外部类,所以只有先创建了外部类才能创建内部类。
2.静态内部类
a.静态内部类的创建不需要依赖外部类,可以直接创建
b.静态内部类不可以使用任何外部类的非static域(包含属性与方法),但可以存在自己的成员变量.
3.方法内部类(方法内部类)
a.方法内部类不允许使用访问权限修饰符。public,private,protected均不允许。
b.方法内部类对外部完全隐藏,除了创建这个类的方法可以访问它以外,其他地方均不能访问。
c.方法内部类如果要想使用方法形参(方法的参数),该形参必须使用final声明(JDK8将形参变为隐式final声明)如何证明括号中的内容:改变形参(因为这个只能用不能改)
4.匿名内部类
概念:是一个没有名字的方法内部类,因此特点与方法内部类完全不一样。除此外,还有俩个自己的特点:
a.匿名内部类必须继承一个抽象类,或者实现一个接口。
b.匿名内部类没有构造方法,因为它没有类名。
下面有一段特殊的匿名内部类代码:
总结:内部类的使用暂时不作为设计的首选。内部类的特点如下:
1.破坏了程序的结构
2.方便进行私有属性的访问(外部类也可以访问内部类的私有域)
3.如果在类名称上出现了“.”,应当立即想到内部类的概念。Outter.Inner