JavaSE --- 内部类

  • 内部类的定义

概念:所谓内部类就是在一个类的内部进行其他类结构的嵌套的操作

范例:简单内部类的实现

  • 内部类的优点:

a.内部类与外部类可以互相访问彼此的私有域(最大的优点

b.内部类可以实现JAVA的单继承局限

c.内部类可以对同一个包中的其他类隐藏起来,仅供外部类使用(保护性)。(private修饰内部类)

范例:内部类实现“多继承”

  • 内部类与外部类的关系

a.对于非静态内部类而言,内部类的创建需要依赖外部类的实例化对象,在没有外部类对象之前是无法创建内部类的。

b.内部类是一个相对于独立的个体,与外部类不是is-a的关系。

c.内部类可以直接访问外部类的元素(包含私有域),但是外部类不可以直接访问内部类元素,需要通过内部类的引用间接访问。

在是简单实现内部类的代码中我们可以看出,内部类内就可以调用外部类的属性,在外部类中可以通过内部类的类对象调用内部类的方法。表明内部类和外部类可以访问彼此的私有域。

  • 创建内部类

  • 创建非静态内部类

外部类.内部类 内部类的引用 = new 外部类( ).内部类( );

表示当前外部类对象 : outer.this

  • 创建静态内部类     直接产生内部类

外部类.内部类 内部类引用 = new 外部类.内部类( );

 

范例:创建非静态内部类对象

范例:创建静态类内部类对象

  • 内部类的分类:

在Java中内部类主要分为成员内部类、静态内部类、方法内部类、匿名内部类。

  • 成员内部类:       不能存在静态变量,但可以访问外部类的静态变量

a.成员内部类不能存在任何static变量或方法,可以访问外部类的静态域

b.成员内部类需要依附外部类new outter().new inner();

c.内部类可以使用private封装,表示私有内部类,该内部类仅供外部类使用

(HaspMap中的Entry内部类,ArrayList中的Node内部类)

 

  • 静态内部类:        不能访问外部类的成员变量,但可以存在自己的成员变量

关键字static可以修饰成员变量、方法、代码块,其实它还可以修饰内部类,使用static修饰的内部类我们称之为静态 内部类。

特点:

a.静态内部类的创建不需要外部类,可以直接创建。

b.静态内部类不可以访问外部类的任何非static域。

 

  • 方法内部类 (方法内部定义的类)     一定没有静态成员变量

特点:

a.方法内部类不能使用任何访问权限修饰符     private  protected 和public均不允许

b.方法内部类对外(方法外)完全隐藏,除了该方法可以访问他之外,其余地方君不介意访问

c.方法内部类要想使用方法形参,该形参必须使用final声明(jdk8变为隐式final声明)

 

Q:为什么方法形参要用final修饰

A:方法创建在栈上。

 

  • 匿名内部类 - 方法内部类的特殊版本    

匿名内部类其实就是一个没有名字的方法内部类,所以它符合方法内部类的所有约束。

范例:匿名内部类

特点:

a. 匿名内部类是没有访问修饰符的。

b. 匿名内部类必须继承一个抽象类或者实现一个接口

c. 匿名内部类中不能存在任何静态成员或方法

d. 匿名内部类是没有构造方法的,因为它没有类名。

e. 与局部内部相同匿名内部类也可以引用方法形参。此形参也必须声明为 final。

 

猜你喜欢

转载自blog.csdn.net/Sun_GLL/article/details/84191902