- 浏览: 22930 次
最新评论
定义:
顾名思义,创建于外部类之内的类。可以定义于外部类的方法内。
下面用I类表内部类,O类表外部类。(I:inner,O:outer)
用途:
1.private修饰的内部类用来隐藏实现的细节
2.匿名类使方法实现更简洁、优美(例:工厂方法,适配器方法)
3.可用于有效的实现“多重继承”
4.水平有限暂不明。
特性:(可类比O类方法)
1.可以使用O类所有成员(包括private)
2.可以被static、private修饰(O类不可以)
3.可以匿名,但必须进行继承
4.可实例化,如果被static修饰:new O.I();否则:new O().new I() (O类引用.new I())
5.不可在O类的导出类中被覆盖 (这点不像O类方法)
6.可被继承,但其指向O类的“秘密的”引用必须被初始化
用途示例1:
用途示例2:
用途示例3:
特性示例:
顾名思义,创建于外部类之内的类。可以定义于外部类的方法内。
下面用I类表内部类,O类表外部类。(I:inner,O:outer)
用途:
1.private修饰的内部类用来隐藏实现的细节
2.匿名类使方法实现更简洁、优美(例:工厂方法,适配器方法)
3.可用于有效的实现“多重继承”
4.水平有限暂不明。
特性:(可类比O类方法)
1.可以使用O类所有成员(包括private)
2.可以被static、private修饰(O类不可以)
3.可以匿名,但必须进行继承
4.可实例化,如果被static修饰:new O.I();否则:new O().new I() (O类引用.new I())
5.不可在O类的导出类中被覆盖 (这点不像O类方法)
6.可被继承,但其指向O类的“秘密的”引用必须被初始化
用途示例1:
class Outer { private class Inner { void innerMethod(String s) { System.out.println(s); } } private Inner inner = new Inner(); public void outerMethod(String s) { inner.innerMethod(s); } } public class Test1 { public static void main(String[] args) { new Outer().outerMethod("InnerMethod print the string"); } }
用途示例2:
//工厂模式示例 interface Product { String getName(); } interface ProductFactory { Product getProduct(); } class CandyFactory implements ProductFactory { public Product getProduct() { return new Product() { public String getName() { return "Candy"; } }; } } class JellyFactory implements ProductFactory { public Product getProduct() { return new Product() { public String getName() { return "Jelly"; } }; } } public class Test1 { static void production(ProductFactory factory) { Product p = factory.getProduct(); String name = p.getName(); System.out.println(name); } public static void main(String[] args) { production(new CandyFactory()); production(new JellyFactory()); } }
用途示例3:
interface Interface1 { void methodI1(); } interface Interface2 { void methodI2(); } class Class1 { void methodC1() {} } class Class2 { void methodC2() {} } public class Test1 { private class RealInterface implements Interface1,Interface2 { public void methodI1() { System.out.println("Implements Interface1"); } public void methodI2() { System.out.println("Implements Interface2"); } } private class RealClass1 extends Class1 { @Override void methodC1() { System.out.println("Implements Class1"); } } private class RealClass2 extends Class2 { @Override void methodC2() { System.out.println("Implements Class2"); } } private RealInterface i = new RealInterface(); private RealClass1 c1 = new RealClass1(); private RealClass2 c2 = new RealClass2(); public void methodI1() { i.methodI1(); } public void methodI2() { i.methodI2(); } void methodC1() { c1.methodC1(); } void methodC2() { c2.methodC2(); } public static void main(String[] args) { Test1 t = new Test1(); t.methodI1(); t.methodI2(); t.methodC1(); t.methodC2(); } }
特性示例:
/* 1.可以使用O类所有成员(包括private) 2.可以被static、private修饰(O类不可以) 3.可以匿名,但必须进行继承 4.可实例化,如果被static修饰:new O.I();否则:new O().new I() (O类引用.new I()) 5.不可在O类的导出类中被覆盖 (这点不像O类方法) 6.可被继承,但其指向O类的“秘密的”引用必须被初始化 */ interface Anonymity {} class Outer { Outer() { System.out.println("Outer()"); new Inner1(); } private String s = "Outer string s"; public class Inner1 { Inner1() { System.out.println("Inner1()"); } private String s = "Inner string s"; void print() { System.out.println(s); //特性1 System.out.println(Outer.this.s); } } //特性2 private static class Inner2 {} public static class StaticInner { StaticInner() { System.out.println("StaticInner()"); } } public Anonymity getAnonumityClass() { //特性3 return new Anonymity() { { System.out.println("AnonymityClass()"); } }; } } class ExtendsOuter extends Outer{ //特性5 ExtendsOuter() { /* == super(); == System.out.println("Outer()"); + new Inner1(); */ } public class Inner1 { Inner1() { System.out.println("ExtendsOuter.Inner1()"); } } //特性6特例 //因为ExtendsOuter已经继承了Outer //从而指向外围类(Outer)的“秘密的”的引用已经通过继承关系(ExtendsOuter extends Outer)进行了初始化 //所以不必再进行“特殊处理” public class ExtendsInner1 extends Outer.Inner1 { ExtendsInner1() { System.out.println("ExtendsOuter.ExtendsInner1()"); } } } public class Test1 { //特性6 public class ExtendsInner2 extends Outer.Inner1 { ExtendsInner2() { new Outer().super(); System.out.println("Test1.ExtendsOuter2()"); } ExtendsInner2(Outer outer) { outer.super(); System.out.println("Test1.ExtendsOuter2(Outer outer)"); } } public static void main(String[] args) { Test1 t = new Test1(); //特性4 new Outer().new Inner1(); new Outer.StaticInner(); //特性5 new ExtendsOuter(); } }
发表评论
-
printf 对 线程同步 的影响(未完成)
2012-12-10 08:58 1269public class Test implements Ru ... -
类的同时初始化
2012-12-07 20:00 768同时初始化两个类的意义在于当两个类之间关系密切,即方法经常与另 ... -
javadoc基本注解
2012-09-27 10:11 1509转载自http://blog.sina.com.c ... -
java动态代理
2012-09-04 22:12 623http://www.cnblogs.com/jqyp/arc ... -
JStat命令使用方法(内存监测)
2012-08-31 23:47 1476http://www.coderli.com/jstat-co ... -
“持有对象”小结
2012-08-31 20:03 697Iterator:用于对任何容器从始至终遍历,且仅能遍历一 ... -
连连看bug log
2012-08-24 21:35 811第一次出错 package kyodai; import ... -
java类的初始化顺序比较
2012-06-14 19:45 749/* 由这个实例可看出同一个类中初始化的先后顺序是: ... -
java命名规范(转载)
2012-06-13 09:13 854定义规范的目的是为了使项目的代码样式统一,使程序有良好的可读性 ...
相关推荐
### Java内部类总结 在Java编程语言中,内部类是一个重要的概念,它允许开发者在一个类的内部定义另一个类。这种特性极大地增强了代码的封装性和复用性,同时也为解决特定问题提供了灵活的方法。本文将围绕Java内部...
本篇文章将深入探讨Java内部类的应用,包括其分类、用法以及优缺点。 一、内部类的分类 Java内部类主要分为以下四种类型: 1. 成员内部类:这是最常见的内部类形式,它作为外部类的一个成员,可以在外部类的任何...
Java集合类是Java编程语言中不可或缺的一部分,它们提供了一种高效、灵活的方式来存储和操作对象。集合类的主要接口包括Collection、List、Set和Map,这些接口定义了各种操作集合对象的方法,比如添加、删除、修改和...
### Java中throws用法总结 在Java编程语言中,异常处理是确保程序稳定性和健壮性的关键机制之一。本文将详细介绍`throws`关键字在Java中的使用方法及其应用场景,并结合具体的代码示例进行深入剖析。 #### 异常...
### Java内部类的实现 在Java编程语言中,内部类是一种非常重要的概念,它允许一个类定义在另一个类的内部。这种设计模式可以提供更高级别的封装,并且可以使内部类对象能够访问外部类的成员(包括私有成员)。本文...
### Java内部类详解 在Java编程语言中,内部类(Inner Class)是一种非常重要的概念,它使得类的设计更加灵活和高效。本文将详细介绍Java内部类的相关知识点,包括其定义、分类以及应用场景等。 #### 一、Java内部...
总结来说,Java内部类是一个强大的工具,它可以增强代码的封装性和复用性,尤其是在处理复杂的对象关系和事件监听等场景。通过深入学习和实践,开发者能够更灵活地运用这一特性,提高代码质量。在这个压缩包中的Java...
总结一下,Java中的匿名内部类提供了一种简洁的方式来实现接口或扩展已有类,常用于事件处理、回调函数以及在特定场景下替代新的类定义。同时,了解Java Web开发中的Cookie、Session、localStorage和sessionStorage...
Java内部类原理与用法实例总结 Java内部类是Java编程语言中的一种特殊的类别,它们定义在其他类的内部,因此也被称为嵌套类。内部类可以访问外部类的成员,包括私有成员,并且可以实现更加紧凑的代码结构。 一、非...
Java内部类应用之静态内部类应用示例主要介绍了Java内部类应用之静态内部类应用,结合实例形式分析了Java静态内部类的原理、功能、用法及相关操作注意事项。 一、静态内部类的定义和特点 静态内部类是使用static...
总结来说,Java枚举类型提供了一种安全、类型安全的方式来定义和使用常量,它可以拥有构造器、方法和字段,并能与switch语句、序列化、反射等Java特性很好地结合。理解并熟练使用枚举,能够使代码更加清晰、易读,...
### Java的String用法类型总结 #### 一、概述 在Java编程语言中,`String` 类是最常用的数据类型之一,用于表示不可变的字符序列。由于字符串在实际开发中的重要性和高频使用特性,深入理解并掌握其用法至关重要。...
### Java中static用法详解 #### 一、概述 在Java编程语言中,`static`关键字扮演着极其重要的角色。它被广泛应用于多种场景中,包括定义静态变量、静态方法、静态代码块以及静态内部类等。通过使用`static`,...
以下是一个具体的静态内部类示例,用于更深入地理解其特性和用法: ```java public class OuterClass { static class StaticInnerClass { // 静态内部类 static private int m = 5; // 静态内部类静态变量 ...
- 启动新线程有多种方式,包括实现`Runnable`接口,继承`Thread`类,以及使用匿名内部类。尽管方法不同,但都应该调用`Thread.start()`,而不是直接调用`run()`,因为`start()`会异步执行`run()`,而直接调用`run()...
总结来说,匿名内部类是Java编程中一种强大的工具,它允许开发者快速实现接口,简化代码,特别是在需要事件处理或访问外部类私有成员的场景下。在Android开发中,匿名内部类经常用于创建自定义的`OnClickListener`、...
例如,Java中的`String`类就是`final`的,目的是防止对其内部结构的修改,确保字符串的不可变性。 对于方法,当一个方法被声明为`final`时,它不能在子类中被重写。这通常用于确保某些核心功能或算法的实现不会被子...
Java局部内部类是一种特殊的内部类,它是在方法、块或者匿名函数中定义的类,具有非常有限的作用域。这种类型的内部类只能在其被声明的范围内使用,因此它们通常用于实现特定方法的功能,或者处理方法中的复杂逻辑。...
总结来说,理解Java内部类的关键在于它们如何与外部类交互。非静态内部类提供了一种紧密耦合的机制,可以直接访问外部类的实例成员,而静态内部类则提供了一种相对独立的封装,只能访问外部类的静态成员。这些特性...
* Java 的内部类 ### 第五章 标准类库 * Java 程序包的结构 * 几个重要的类 ### 第六章 图形用户界面与事件处理 * Java GUI 编程 * AWT 绘图的主要方法 * 基于 Swing 组件的 GUI 编程 * 图形组件的布局和管理 * ...