内部类总结

一、内部类的分类:
	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("汽车再跑!");
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值