- 浏览: 162239 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (193)
- Axis2 (10)
- Andriod (2)
- Java (22)
- Eclipse (2)
- 程序人生 (3)
- Windows (1)
- Sql Server 2005/2008 (7)
- 健身 (2)
- Log4j (1)
- Ant (1)
- Fatjar (2)
- 国际化 (1)
- Linux (3)
- JDBC (1)
- Oracle (2)
- 各种报错 (4)
- SWT (5)
- Tomcat (2)
- 车辆管理 (1)
- SVN (2)
- Spring (5)
- 域名服务器 (0)
- HaoWaYa (1)
- FTP (1)
- 集散中心 (1)
- 专业知识 (1)
- 面试准备 (19)
- 设计模式 (22)
- Junit (1)
- 软件下载 (3)
- 深入理解Java虚拟机 (3)
- 数据结构 (4)
- 雅思 托福 (0)
- UML (1)
- Maven (1)
- CV (1)
- ServiceMix (1)
- 电子书 (5)
- Struts1/2 (4)
- DOM W3C DHTML (3)
- Jawr (1)
- LoadRunner (1)
- Java反编译 (0)
- 英语学习 (0)
- 技术书籍 (1)
- Cygwin (0)
- ibatis (1)
- 数据库 (1)
- jQuery (0)
- s (2)
- 源代码项目 (5)
- JSRs (0)
- JCP (0)
- XML (2)
- Dojo (3)
- Effective Java (1)
- 一站到底 (3)
- JavaScript (6)
- DB2 (1)
- 刷机 (1)
- 字符 (1)
- Dynamic Web Project (1)
- 股市日记 (1)
- 代码片段 (0)
- CSS (1)
- PDF (0)
- 英语口语 (1)
- 乒乓球 (1)
- 体检 (0)
- 送花 (0)
- 面试准备-再战江湖 (5)
- ddq (0)
- sss (0)
- ssssss (0)
- 2020面试 (0)
最新评论
-
samsongbest:
Copperfield 写道你的目标很远大,佩服~惭愧,都忘了 ...
人生目标 -
Copperfield:
你的目标很远大,佩服~
人生目标
Java内部类
1. 定义普通内部类
package com.sam.innerclass; public class Parcel1 { //define inner class class Content{ } public void ship() { Content c = new Content(); } public static void main(String[] args) { Parcel1 p = new Parcel1(); p.ship(); } }
2. 外部类创造内部类对象
package com.sam.innerclass; public class Parcel2 { public void ship() { Parcel1 p = new Parcel1(); //OuterClassName.InnerClassName Parcel1.Content c = p.new Content(); } }
3. 给内部类加修饰符
package com.sam.innerclass; public class Parcel3 { //define inner class private class Content{ } public void ship() { Content c = new Content(); } } class TestParcel3{ Parcel3 p = new Parcel3(); // Illegal -- can't access private class: //! Parcel3.Content = p.new Parcel3(); }
普通的(非内部的)类,不能声明为private或protected;它们只可以被赋予public或者包访问权。
4.局部内部类,可定义在方法中。
package com.sam.innerclass; public class Parcel4 { public void ship() { // Nesting a class within a method. class Content{ } } }
5. 在任意作用域嵌入内部类,已经和其它类一起编译过了
package com.sam.innerclass; public class Parcel5 { public void ship(boolean b) { if (b) { // Nesting a class within a scope. class Content { } } // Can't use it here, out of scope //! Content c = new Content(); } }
6. 匿名内部类
公用接口Destination
package com.sam.innerclass; public interface Destination { String readLine(); }
公用借口Contents
package com.sam.innerclass; public interface Contents { int value(); }
匿名内部类例子:
package com.sam.innerclass; public class Parcel6 { public Contents ship() { return new Contents() { @Override public int value() { return 0; } }; } }
上述匿名语法是下述形式的简化形式:
class MyContents implements Contents{ public int value() { return 0; } } return new MyContents();
7. 带参数构造方法的匿名内部类
公共类
package com.sam.innerclass; public class Wrapping { private int i; public Wrapping(int x) { i = x; } public int value() { return i; } }
匿名内部类的构造方法带参数:
package com.sam.innerclass; public class Parcel7 { public Wrapping wrap(int x) { return new Wrapping(x) { public int value() { return super.value()*47; } }; } }
8.匿名内部类中访问外部参数引用必须是final的。
package com.sam.innerclass; public class Parcel8 { public Contents ship(final String name) { return new Contents() { String uname = name; public int value() { return 0; } }; } }
9. 通过实例初始化,能达到为匿名内部类创建一个构造器的效果。
package com.sam.innerclass;
abstract class Base{
public Base(int i) {
}
public abstract void f();
}
public class AnonymousConstructor {
public static Base getBase(int i) {
return new Base(i) {
public void f() {
}
};
}
}
package com.sam.innerclass; abstract class Base{ public Base(int i) { } public abstract void f(); } public class AnonymousConstructor { public static Base getBase(int i) { return new Base(i) { public void f() { } }; } }
此例中i不要求的final的,因为没有在匿名内部类中直接使用。
10. 内部类可以访问外围类的所有对象。
package com.sam.innerclass; public class Parcel1 { int i; //using object of outer class class Content{ int j = i; } }
11.嵌套类
内部类与外部类不再有联系,嵌套类就是内部类加上一个static,内部类中不再有外部类的this对象。
package com.sam.innerclass; public class Parcel10 { static class Content{ static void ship() { } } }
12. 引用外围类的对象
要创建内部类对象,必须先创建外围类对象,因为内部类都回悄悄地连接到外围类对象。
package com.sam.innerclass; public class Parcel11 { class Content { } public static void main(String[] args) { // this is wrong // ! Content c = new Content(); Parcel11 p = new Parcel11(); Content c = p.new Content(); } }
13. 从多层嵌套类中访问外部类成员
package com.sam.innerclass; public class Parcel12 { class A { class B { class C { } } } public static void main(String[] args) { Parcel12 p = new Parcel12(); Parcel12.A a = p.new A(); A.B b = a.new B(); A.B.C c = b.new C(); A.B.C c2 = new Parcel12().new A().new B().new C(); } }
14. 内部类的继承
继承内部类,缺省的构造器不能用,必须在构造器里用外网类引用的super()方法。
enclosingClassReference.super();
package com.sam.innerclass; class WithInner { class Inner {} } public class InheritInner extends WithInner.Inner{ //! InheritInner() {} //Won't compile InheritInner(WithInner wi) { wi.super(); } }
15. 内部类可以被覆盖吗
继承外部类,再覆盖内部类,执行时并没有什么作用,内部类在各自的命名空间里。
package com.sam.innerclass; class WithInner { class Inner {} } public class InheritInner extends WithInner{ class Inner{} }
但当覆盖的内部类明确继承某个内部类时,则有作用。
package com.sam.innerclass; class WithInner { class Inner {} } public class InheritInner extends WithInner{ class Inner extends WithInner.Inner {} }
16. 局部内部类和匿名内部类的区别
初始化时,局部内部类可以有构造方法,匿名内部类因为没有名字,所以没有构造方法。
17. 内部类的class文件
Counter.class
LocalInnerClass$2.class
LocalInnerClass$1LocalCounter.class
LocalInnerClass.class
匿名类会产生一个数字加在$后面。
18. 为什么需要内部类
答案:可以实现Java的多重继承,每个内部类可以实现一个单独的接口。
19. 闭包与回掉
闭包是一个可调用的对象,记录了创建它作用域的一些信息,内部类是面向对象的闭包,内部类可以继承接口,实现方法后返回一个钩子。
1. 指明内部类对象的类型:OuterClassName.InnerClassName
发表评论
-
摩根面试全过程
2012-06-21 11:09 755http://hi.baidu.com/%D4%DA%C2%B ... -
ana from pwc
2012-05-09 17:06 0mei messon messon619@ ... -
SAP面试
2012-05-03 21:20 02个小时 3道代码题: 1. Shape, Square, ... -
sap jd
2012-04-30 12:18 0W e are hiring developer for o ... -
面试电子书
2012-04-24 16:16 734面试电子书 -
聚集索引和非聚集索引的区别
2012-04-20 09:28 654http://www.cnblogs.com/flashicp ... -
code for citi
2012-04-19 17:18 0说一些你知道的runtime exception? 说一些 ... -
Apache Http Server和Tomcat 之区别
2012-04-19 09:29 569转自:http://blog.csdn.net ... -
ArrayList Victor LinkedList的区别
2012-04-18 13:43 1501ArrayList Victor Linked ... -
浅析Java抽象类和接口的比较
2012-04-18 09:58 634http://www.enet.com.cn/article/ ... -
Servlet生命周期与工作原理
2012-04-17 21:04 635http://www.cnblogs.com/cuiliang ... -
Spring mvc
2012-04-17 20:49 888http://hi.baidu.com/sxgxg/blog/ ... -
Tomcat内存溢出的原因
2012-04-17 20:38 630Tomcat内存溢出的原因 ... -
Statement和PreparedStatement之间的区别
2012-04-17 20:20 687http://hi.baidu.com/hi521/blog/ ... -
JAVA中String与StringBuffer的区别
2012-04-17 20:19 814http://blog.csdn.net/yirenti ... -
sse
2012-04-17 19:52 0Sr.Java 1. ... -
Java并发/多线程
2012-04-10 17:03 818Java多线程 实现线程的两种方法: a. 继承Threa ... -
23个设计模式
2012-03-29 14:18 787第一部分 接口型模式 1. Adapter( ... -
Java初始化的顺序
2012-03-28 16:19 648父类静态变量 子类静态变量 进入子类构造方法 进入父类构 ... -
<<数据结构>> 内部排序的java实现
2012-03-28 15:57 11151. 插入排序 算法描述: 从左边开始增大序列,把右边 ...
相关推荐
Java内部类是Java言语的一个很重要的概念,《Java编程思想》花了很大的篇幅来讲述这个概念。但是我们在实践中很少用到它,虽然我们在很多时候会被动的使用到它,但它仍然像一个幕后英雄一样,不为我们所知,不为我们...
java内部类详解
Java内部类总结 学习java的资源
从Java1.1开始引入了内部类以来,它就引起了人们的激烈争论。其实任何优秀的语言特性用得不好就是滥用,内部类用得不好就会导致代码像迷宫一样,导致出现毫无重用的综合征。...本文档讲述Java内部类的规则及应用
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内部类Java内部类
java 内部类 实例内部类 局部内部类 匿名类 静态内部类 实例代码
详细介绍JAVA内部类的用法,用途,基本语法,及匿名类用法
Java内部类的作用
JAVA内部类的一些总结
对内部类不错的讲解,以及如何应用并且还帮你归了类,不错的选择
高效的课件,详细的内容介绍,针对性的代码展示,提高性的练习题目。适合新手或者基础薄弱人员学习,一个PPT解决你编程中常见的错误,最重要的是一人下载多人使用,不受限制,没有隐藏密码
Java 干货之深入理解Java内部类;Java 干货之深入理解Java内部类;Java 干货之深入理解Java内部类;Java 干货之深入理解Java内部类;Java 干货之深入理解Java内部类;
java基础java内部类