内部类总结
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("汽车再跑!"); } }
相关文章推荐
- C#习题之推箱子
- Xcode Object-c 更改按钮外观
- SPOJ 375 树链剖分
- soj 2113 数字游戏(环形DP)
- hdu5465
- Xcode的一些使用技巧
- Linq分组
- 0921,函数 枚举
- NOI题库1799 最短前缀
- leetcode18 4sum
- 【NOIP2015 11.2上午模拟】总结
- libevent代码阅读(2)——尾队列的学习
- 黑马程序员——基础知识——面向对象
- phpmyadmin 配置文件权限错误,无法写入!
- Java资源大全中文版
- label
- 二进制中有多少个1
- 从驱动层分析android的Binder机制
- 从驱动层分析android的Binder机制-android学习之旅(83)
- 从驱动层分析android的Binder机制-android学习之旅(83)