专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程综合 » java内部类:JAVA中的内部类 »正文

java内部类:JAVA中的内部类

来源: 发布时间:星期六, 2008年11月29日 浏览:39次 评论:0
[ft=,2,]// 2004-9-18
[ft=,2,]内部类总结:
[ft=,2,]1内部类的嵌套可以理解成类的链关系,在构造一个内部类(非static)的实例的时候,会将直接外层类的实例
[ft=,2,]作为参数传进构造函数,而外层类的实例也是用其外层类的实例构造,所以是一种链状关系,内部的类可以使用所有
[ft=,2,]外层的类的实例,而外层的类不能使用内层的类, 应用a.this(最外层类实例) ,a.b.c.this(链中某个外层的实例)。
[ft=,2,]class TheOuter{
[ft=,2,] class kk {
[ft=,2,] class gg {
[ft=,2,] int tt = 100;
[ft=,2,] }
[ft=,2,] }

[ft=,2,] class aa {
[ft=,2,] class bb {
[ft=,2,] int jj = 10;
[ft=,2,] class cc {
[ft=,2,] { int ff = TheOuter.aa.bb.this.jj;
[ft=,2,] // 无法直接访问到gg不在链关系内
[ft=,2,] System.out.println(ff);
[ft=,2,] }
[ft=,2,] }
[ft=,2,] }
[ft=,2,] }
[ft=,2,]}
[ft=,2,]2 创建一个内部类 new aa().new bb().new()cc 实际上是调用 外层类实例.new 本层构造函数()
[ft=,2,] 如果内部类是static的不需要外层类的实例 多个static嵌套的内部类的实例 aa.bb.cc test = new aa.bb.cc();
[ft=,2,]3
[ft=,2,]class a0 {
[ft=,2,] class b0 {
[ft=,2,] }
[ft=,2,]}
[ft=,2,]class vvv{
[ft=,2,] class ff extends a0.b0 {// ff这里不是内部类也行
[ft=,2,] ff(a0 kk){
[ft=,2,] kk.super();
[ft=,2,] }
[ft=,2,] }
[ft=,2,]}
[ft=,2,]继承自内部类要调用父类的外层类的super()
[ft=,2,]4
[ft=,2,]class dd {
[ft=,2,] void print(){
[ft=,2,]System.out.println("dd.println is there");
[ft=,2,] }
[ft=,2,] class kk {
[ft=,2,] kk(int i){}
[ft=,2,]class cc {
[ft=,2,] void pp() {
[ft=,2,] System.out.println("****");
[ft=,2,] }
[ft=,2,] void ddpp() {
[ft=,2,] dd.this.print();
[ft=,2,] }
[ft=,2,]}
[ft=,2,] }
[ft=,2,]}
[ft=,2,]class aa {
[ft=,2,] public static void main (String agrs[]) {
[ft=,2,] dd.kk.cc test = new dd().new kk(10).new cc();
[ft=,2,] test.ddpp();
[ft=,2,] }
[ft=,2,]}
[ft=,2,]在类内部可以是使用外层类,但是如果生成一个实例的句柄就没有提供访问上层类的功能。

[ft=,2,]5 this 是指本类的实例
[ft=,2,]6 缺省的new
[ft=,2,]class cc {
[ft=,2,] {
[ft=,2,] new test();
[ft=,2,] }
[ft=,2,] class kk {
[ft=,2,] {
[ft=,2,] System.out.println("there kk");
[ft=,2,] }
[ft=,2,] }

[ft=,2,] class test {
[ft=,2,] {
[ft=,2,] new kk();
[ft=,2,] }
[ft=,2,] class kk {
[ft=,2,] {
[ft=,2,] System.out.println("there test_kk");
[ft=,2,] }
[ft=,2,] }
[ft=,2,] }
[ft=,2,]}
[ft=,2,]可以直接使用new,new的范围可以是 之际外层.this.new 和this.new 但是如果内层与外层出现同名类以内部优先
[ft=,2,]7
[ft=,2,]//当有链关系的时候要注意类不要重名
[ft=,2,]class vv {
[ft=,2,] class bb {} //!
[ft=,2,] class kk {
[ft=,2,] //class vv{} 这样就会出错
[ft=,2,] class bb {} //!这样就不会出错
[ft=,2,] }
[ft=,2,]}
[ft=,2,]8
[ft=,2,]class a0 {
[ft=,2,] class b0 {
[ft=,2,] }
[ft=,2,]}
[ft=,2,]class vvv{
[ft=,2,] class ff extends a0.b0 {// 不是内部类也行
[ft=,2,] ff(a0 kk){
[ft=,2,] kk.super();
[ft=,2,] }
[ft=,2,] }
[ft=,2,]}
[ft=,2,]继承自内部类要调用父类的外层类的super()
[ft=,2,]9 匿名内部类
[ft=,2,]interface oo {
[ft=,2,] //oo(int g) {}
[ft=,2,] int k = 10;
[ft=,2,] void pt();
[ft=,2,]}
[ft=,2,]class pp {
[ft=,2,] pp(int g) {
[ft=,2,] }
[ft=,2,] int get() {
[ft=,2,]return 100;
[ft=,2,] }
[ft=,2,]}

[ft=,2,]class me {
[ft=,2,] /*
[ft=,2,] interface oo {
[ft=,2,]void pt();
[ft=,2,] }
[ft=,2,] */
[ft=,2,] class kk{
[ft=,2,]oo testmed() {
[ft=,2,] final int i = 10;
[ft=,2,] int g = 100;
[ft=,2,] return new oo() {
[ft=,2,] int kk;
[ft=,2,] {
[ft=,2,] // 使用外面的东西要声名成final
[ft=,2,] // 继承接口内部优先
[ft=,2,] // 匿名内部类没有构造函数,只能使用块,初始化
[ft=,2,] kk = i + k ;
[ft=,2,] }
[ft=,2,] public void pt() {
[ft=,2,] System.out.println(kk);
[ft=,2,] }
[ft=,2,] };
[ft=,2,]}
[ft=,2,]pp testmed0() {
[ft=,2,] return new pp(10){ // 继承自类
[ft=,2,] public int get() {
[ft=,2,] return super.get() * 10;
[ft=,2,] }
[ft=,2,] };
[ft=,2,]}
[ft=,2,] }
[ft=,2,]}
[ft=,2,]匿名内部类可以继承自接口也可以继承自类,继承自类的构造函数中 可以有参数。
[ft=,2,]10
[ft=,2,]class bf {
[ft=,2,] interface kk {}
[ft=,2,] class aa {
[ft=,2,] // 接口能嵌套在接口中(不受限制),或者嵌套在顶层,下面就不行
[ft=,2,] //interface gg {}
[ft=,2,] }
[ft=,2,]}
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: