`
lovethisworld
  • 浏览: 52530 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java内部类

    博客分类:
  • Java
阅读更多

从外部类的非静态方法之外的任意位置创建某个内部类的对象,均需要指明对象类型:OuterClass.InnerClass,可通过函数或者是outer.new InnerClass()实例化(outer是外部类的一个实例化对象)。

内部类拥有对其外部类所有成员的访问权:当某个外围类的对象创建一个内部类对象时,内部类获得一个指向外围类对象的引用,下面代码可以验证:

public class Outer {
	
	class Inner {
		Outer getOuter() {
			return Outer.this;	// 指向外围类对象的引用
		}
	}

	public static void main(String[] args) {
		Outer outer = new Outer();
		Outer.Inner inner = outer.new Inner();
		System.out.println(outer.hashCode());
		System.out.println(inner.getOuter().hashCode());
	}
}
/* output
12677476
12677476
*/
 

 

匿名内部类: 

 

public class Test {
	
	public Class getClass(final int i) {      // 因为参数i在内部类中需要使用,需要声明为final类型
		return new Class(i) {
			// 添加属性或方法
			
			// 对于匿名类而言,此初始化的效果就是构造器,但无法实现构造器重构
			{
				System.out.println(i);
			}

		};
		// 与上面等价
//		class TT extends Class {
//			TT(int i) {
//				super(i);
//			}
//			// 添加属性或方法
//		}
//		return new TT(i);
	}
	
	public Interface getInterface() {
		return new Interface() {
			@Override
			public void f() {
			}
			// other code
		};
		// 与上面等价
//		class TT implements Interface {
//			@Override
//			public void f() {
//			}
//			// other code
//		}
//		return new TT();
	}

	public static void main(String[] args) {

	}
}

class Class {
	private int i = 1;
	Class(int i) {
		this.i = i;
	}
	public void f() {
		System.out.println("other f" + i);
	}
}

interface Interface {
	int i = 3;
	void f();
}

 

 

嵌套类:

如果不需要内部类对象与外部类对象之间有联系,那可将内部类声明为static :

则1、创建嵌套类的对象不需要外围类对象,2、不能从嵌套类的对象中访问非静态的外围类对象

嵌套类可以有static数据和字段,也能包含嵌套类

 

为什么需要内部类:

Q :如果只是需要一个对接口的引用,为什么不通过外围类实现接口呢?

A:如果这能满足需求,那就应该这么做!

 

每个内部类都能独立地继承自一个(接口的)实现,无论外围类是否已经继承了某个(接口的)实现。通过内部类可以实现多重继承

 

闭包与回调:

内部类实现一个接口, 通过回调返回接口的一个引用,该引用指向内部类的一个对象,外界只能操作接口提供的方法,内部类对外是透明的。

 

 

当内部类被继承时,指向外围类对象的引用必须被初始化,而在到处类中不再存在可连接的默认对象,所以在构造器内使用如下语法:enclosingClassReference.super();

当导出类中重新定义了与基类的内部类同名的内部类,基类的内部类将被覆盖吗?事实证明,这两个内部类是完全独立的两个实体,除非是明确继承。

局部内部类:在代码块中创建,但不能有访问说明符,因为它不是外围类的一部分,但它可以访问房前代码块内的常量,以及外围类的所有成员。

内部类的class文件名为:OuterClass$InnerClass.class

 

分享到:
评论

相关推荐

    浅谈Java内部类的四个应用场景

    Java内部类是Java言语的一个很重要的概念,《Java编程思想》花了很大的篇幅来讲述这个概念。但是我们在实践中很少用到它,虽然我们在很多时候会被动的使用到它,但它仍然像一个幕后英雄一样,不为我们所知,不为我们...

    java内部类详解

    java内部类详解

    Java内部类总结

    Java内部类总结 学习java的资源

    Java内部类应用详解

    从Java1.1开始引入了内部类以来,它就引起了人们的激烈争论。其实任何优秀的语言特性用得不好就是滥用,内部类用得不好就会导致代码像迷宫一样,导致出现毫无重用的综合征。...本文档讲述Java内部类的规则及应用

    12.java内部类.zip

    12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类.zip12.java内部类...

    java内部类的讲解

    这里是自己对java内部类整理的一篇文章,有可执行的源代码

    java内部类使用例子

    java内部类使用例子,可以运行

    Java内部类的四个应用场景

    谈Java内部类的四个应用场景

    java 内部类应用

    java 内部类应用java 内部类应用java 内部类应用java 内部类应用java 内部类应用java 内部类应用java 内部类应用java 内部类应用java 内部类应用java 内部类应用

    Java 内部类

    Java 的使用 分别介绍了 成员内部类、方法内部类、静态内部类

    Java内部类(DOC)

    Java内部类Java内部类Java内部类Java内部类Java内部类Java内部类Java内部类

    java 内部类 局部内部类 匿名类 实例代码

    java 内部类 实例内部类 局部内部类 匿名类 静态内部类 实例代码

    JAVA 内部类 PPT

    详细介绍JAVA内部类的用法,用途,基本语法,及匿名类用法

    Java内部类的作用

    Java内部类的作用

    JAVA内部类总结

    JAVA内部类的一些总结

    JAVA内部类.doc

    对内部类不错的讲解,以及如何应用并且还帮你归了类,不错的选择

    java内部类

    高效的课件,详细的内容介绍,针对性的代码展示,提高性的练习题目。适合新手或者基础薄弱人员学习,一个PPT解决你编程中常见的错误,最重要的是一人下载多人使用,不受限制,没有隐藏密码

    Java 干货之深入理解Java内部类(学习资料)

    Java 干货之深入理解Java内部类;Java 干货之深入理解Java内部类;Java 干货之深入理解Java内部类;Java 干货之深入理解Java内部类;Java 干货之深入理解Java内部类;

    java基础java内部类

    java基础java内部类

Global site tag (gtag.js) - Google Analytics