内部类

我们为什么需要内部类?

  我基本没接触到内部类的实际使用,是我孤陋寡闻了。据说匿名内部类在Android开发中用的比较多。但既然是Java支持的基础编程语法,还是要先了解一下的,万一哪天就用上了,或者是去做安卓开发了呢。

  我对内部类的研究甚少,这篇文章目前只对四中内部类做了应用实例,关于java内部类详解,可以阅读该文章:《Java内部类详解》。我的这篇文章会在我对内部类有了更深的、自己的理解后,进行更新。

实例内部类

  直接定义在类中的一个类,在类前无修饰符。且在内部类当中,不能有静态成员。基本概念就不多说了,直接通过实例,了解一下用法:

class Outter{
	private int a = 10;  // 注意,是private 
	public class Inner{
		int a = 20;
		void show() {
			int a = 30;
			System.out.println("访问外部类的a:"+Outter.this.a);  // 内部类可以直接访问外部类的private成员
			System.out.println("访问内部类的a:"+this.a); 
			System.out.println("访问局部变量的a:"+a); 
		}
	}
}

public class Test{
	public static void main(String[] args) {
		Outter outter = new Outter();
		Outter.Inner inner = outter.new Inner();   // 内部类依赖于外部类,需要通过外部类创建
		inner.show();
	}
}
-----------------------------------------------------
输出结果:
访问外部类的a:10
访问内部类的a:20
访问局部变量的a:30

静态内部类

  用static修饰的内部类,称为静态内部类。要理解静态内部类,首先得理解《static关键字》

  来个实例:

class Outter{
	
	private int a = 10;
	
	static class Inner{
		int a = 20;
		void show() {
			int a = 30;
			//System.out.println("访问外部类的a:"+Outter.this.a);  // 内部类是静态的,有静态内部类实例时并不一定有外部类变量实例,所以静态内部类不能访问外部类。
			System.out.println("访问内部类的a:"+this.a); 
			System.out.println("访问局部变量的a:"+a); 
		}
		
	}
	
}

public class Test{
	public static void main(String[] args) {
		Outter.Inner inner = new Outter.Inner();  // 静态static,就可以直接通过类名使用
		inner.show();
	}
}
---------------------------------------------------------------
输出结果:
访问内部类的a:20
访问局部变量的a:30

局部内部类

  定义在方法中的内部类,称为局部内部类。来个实例:

class Outter{
	
	private int a = 10;
	
	void show(){
		
		int a = 20;
		System.out.println("Outter");
		System.out.println("访问外部类的局部变量的a:"+a); 
		
		class Inner{ // 定义在方法中的内部类,作用域只在show方法中
			
			int a = 30;
			
			void show(){
				
				int a = 40;
				
				System.out.println("Inner");
				System.out.println("访问外部类的a:"+Outter.this.a);
				System.out.println("访问内部类的a:"+this.a); 
				System.out.println("访问内部类的局部变量的a:"+a); 
			}
		}
		
		Inner inner = new Inner(); // 在外部类的show方法中创建局部内部类
		inner.show();
		
	}
	
}

public class Test{
	public static void main(String[] args) {
		Outter outter = new Outter();  // 只能创建外部内,无法在这里创建内部类
		outter.show();
	}
}
--------------------------------------------------------------------------
输出结果:
Outter
访问外部类的局部变量的a:20
Inner
访问外部类的a:10
访问内部类的a:30
访问内部类的局部变量的a:40

匿名内部类

  匿名内部类是一种特殊的局部内部类,没有构造器。来个实例:


interface A {
	void test();
}

class B {

	public void test(A a) {
		
		a.test();  // 调用传入的,匿名内部类的实例化对象,的test方法
		System.out.println("Word");

	}
}

public class Test {

	public static void main(String[] args) {

		B b = new B();
		b.test(new A() {   // A 是一个接口,不能直接new,这里就是定义了一个匿名类,得以new出实例化对象
			@Override
			public void test() {
				System.out.println("Hello");
			}
		});
	}
}
----------------------------------------------------------
输出结果:
Hello
Word
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值