JAVA之内部类

  • 内部类
内部类是指在一个外部类的内部再定义一个类。
  • 使用场景
在J2EE编程中使用较少,不过在窗口应用编程中特别常见,主要用来事件的处理。

java通过内部类加上接口,可以很好的实现多继承的效果。

做GUI(图形用户界面)开发时候,事件的响应处理全靠内部类了。

  • 特点
可以是静态static的,也可用public,default,protected和private修饰。
编译完成后出现outer.class和outer$inner.class两类。所以内部类的成员变量/方法名可以和外部类的相同。
必须使用外部类对象来创建内部类对象,而不是直接去new一个。
  • 分类:成员内部类、局部内部类、静态内部类、匿名内部类
  • 成员内部类
  1. 内部类作为外部类的一个成员存在,与外部类的属性、方法并列可访问外部类的全部域和方法。包括私有域。(访问控制与命名控制)访问外部类的同名成员变量,外部类名.this.变量名。不同名,直接访问。
  2. 外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。
  3. 成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的。
  4. 基于安全考虑,内部类最好声明为private,由其所在外部类生成对象。
public class Outer {
	private int salary;
	private int age;

	public static void main(String[] args) {
		// 创建一个内部类对象
		Outer outer = new Outer();
		Inner in = outer.new Inner();
		in.countSalary();
	}

	private class Inner {
		private int age = 5;

		private void countSalary() {
			int s = salary;
			int oua = Outer.this.age; // 内外有同名成员,使用外部类.this.成员名访问外部成员
			int ina = this.age;// 访问内部类自己的成员
			System.out.println(ina);
		}
	}
}
  • 局部内部类
在方法中定义的内部类与局部变量类似。如if(){}语句块里可以使用。
只在该方法或条件的作用域内才能使用。
使用场景:如果只在某个方法内创建对象时使用,则可以用局部内部类。
不仅可以访问外部类的域和方法,还能访问外部类这个方法声明为final的局部变量
	public void part() {
		class PDestination implements Serializable {
			private String label;

			private PDestination(String whereTo) {
				label = whereTo;
			}

			public String readLabel() {
				return label;
			}
		}
		PDestination d = new PDestination("");
	}

  • 静态内部类
(场景:取消对外部类中的引用,此内部类无须引用其它对象时使用。)静态方法中只能用静态内部类。
静态内部类中可以定义静态和非静态的成员。
不需要内部类对象和外部类对象之间的联系,就是说我们可以直接引用outer.inner,即不需要创建外部类,也不需要创建内部类。
不能声明为private,一般声明为public,方便调用。
  • 匿名内部类
为了免去给内部类命名,便倾向于使用匿名内部类。
没有构造器。
匿名内部类是不能加访问修饰符的。要注意的是,new 匿名类,这个类是要先定义的
当所在的方法的形参需要被内部类里面使用时,该形参必须为final。

参考:http://lavasoft.blog.51cto.com/62575/179484。

http://www.cnblogs.com/silence250627170/archive/2011/11/29/thinkinginjava.html 其实参考了很多文章,真的是很多,就不一一列了,只列得这两篇觉得最合适的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值