您的位置:首页 > 其它

内部类总结

2015-11-05 20:44 232 查看
一、内部类的分类:
1、静态内部类
2、非静态内部类
1)、成员内部类
2)、方法内部类:在外部类的方法或者代码块中定义内部类
3)、匿名内部类
注意:1、内部类任然是一个独立的类,编译形成.class文件,只是在前面加上
外部类名和$符号。
 2、内部类也可以使用修饰符:private、protected、default、public
 3、内部类的定义大多数情况下仅仅是为了让外部类使用。
 4、匿名内部类多数情况下放在方法里面,因此它既是匿名内部类,又是方法内部类。

二:静态内部类:
1、静态内部类中可以包含静态的内部成员,也可以包含非静态的内部成员。
2、静态内部类可以直接调用外类的静态属性和方法,但不能调用非静态的属性和方法。
3、再不相关的类中可以直接创建静态内部类的对象,无需经过外部类。
4、静态内部类实际上和外部类联系很少,只是在命名空间上的联系。

5、成员内部类的创建方式:
1)Outer.Inner in = new Outer.Inner();
2)Inner in = new Inner()
建议采用第一种方式。

三:成员内部类:
1、成员内部类就像是外部类的一个属性一样
2、成员内部类可以访问外部类的所有成员(包括private型)
3、成员内部类中的this指的是内部类的对象,获得外部类对象:外部类名+.this
4、成员内部类不能有静态成员(除非声明为final常量)
final static int d = 80;// 可以
final static Date d2 = new Date();// 不可以
5、成员内部类绑定到外部类上,要利用内部类,先要获得内部类。

6、成员内部类的创建方式:
Outer outer = new Outer;
Outer.Inner inner = Outer.new Inner();

上面也可以直接写为:Outer.Inner inner = new Outer().new Inner();

四:方法内部类:
1、方法内部类的地位与方法内部的局部变量类似,因此不能修饰局部变量的修饰符也不能修饰
方法内部类,如:public、private、protected、static、transient
2、方法内部类只能在声明的方法内可见,因此定义局部内部类后,想用的话要在方法内直接
实例化,记住这里顺序一定不能反,先声明,后使用。
3、方法内部类不能访问定义它的方法内的局部变量,除非这个变量被定义为final。
  本质原因:局部变量和方法内部类生命周期不一致所致。
4、方法内部类只能包含非静态成员。

五:匿名内部类:
根据声明的位置,判断匿名内部类是成员内部类还是方法内部内。
注:一般是方法内部类,这就具备了方法内部类的特性。
匿名内部类只能使用一次。

三种使用方式:
1、继承式
2、接口式
3、参数式

关于匿名内部类的代码实例:

package com.chen.Anonymous_Inner_Class;
/**
* 测试匿名内部类
* 1、继承式
* 2、接口式
* 3、参数式
* @author Administrator
*
*/
public class Test {

public static void main(String[] args) {

Outer05 outer = new Outer05();

outer.test();

// 3、参数式
outer.test02(new Car() {

@Override
public void run() {

System.out.println("我的车再跑!");
}
});
}

}

class Outer05 {

// 2、接口式
Runnable runnable = new Runnable(){

@Override
public void run() {
// TODO Auto-generated method stub

}
};

// 1、继承式
public void test() {

Car car = new Car(){

@Override
public void run() {

System.out.println("子类的汽车再跑!");
}
};
car.run();
}

// 3、参数式
public void test02(Car car) {

car.run();
}
}

class Car {

public void run() {

System.out.println("汽车再跑!");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: