传智播客学习之面试-内部类

来源:互联网 发布:mysql无法删除表 编辑:程序博客网 时间:2024/06/01 18:45

最近一直专注于android的学习,发现内部类实在是一个很重要的知识点,而经过了漫长的javaEE学习后,javaSE似乎有点遗忘了,实在惭愧,于是利用今天剩下一小时将其总结如下:

一、普通内部类

1.在内部类中,内部类对象都保存有一个对外部类对象的引用,一般用    outerclass.this来表示。

2.内部类可以访问外部类的所有成员,但是外部类不能访问内部类成员,内部类成员只有在内部类的范围内可知

3.主要好处:高内聚,低耦合

4.何时用?当一个类和另一个类的关系是一个类需要被另一个类全部知道,而并不需要知道另一个类时可以使用内部类。

5.内部类实例化主要是通过外部类的对象或者对象的引用来访问。内部类实例化的的三种方式

1)通过外部类的非静态方法实例化内部类

2)通过外部类的静态main方法实例化内部类

3)在内部类中通过this表示内部类的实例

二、局部内部类

   特点与常见的内部类差不多,只是放在函数或者for循环中,其主要区别是在局部内部类中,如果要访问外部类的局部变量,必须用final修饰,因为方法的生命周期只是在调用时存在,方法调用完了就结束了,而内部类实例化后并不随外部类成员方法的消失而消失。其次实例化需要先实例化外部类。在内部类中不能定义静态的属性。

三、匿名内部类

 

前提:内部类可以继承外部类,或者可以实现外部接口。

匿名内部类没有构造函数。注意当其继承一个有参数的构造函数的父类时,创建时一定要带参数,并在实现的过程中使用super关键字调用相应的内容。

语法格式

New [类名或接口]

{需要补足的内容即需要覆盖的内容或者新的方法}.方法名

何时用?

通常,看到接口型参数,并该接口中的方法不超过三个,那么这时可以通过匿名内部类的形式,进行参数传递

例:abstract class Test

abstract void method();

}

class Outer

{

  static private int x=4;

public static void main(String[] args)

{

new Test()

{

void method()

{

System.out.println(x);

}

}.method();

原创粉丝点击