内部类和匿名内部类

**

**
最重要的。内部类综述
. 在另人家类中规定类,内部类高位内部类(内置类)。、嵌套类
.接见特点:
1)内部类可以直截了当地接见内部类的围攻,包含生殖器围攻
2)当内部类贫穷接见内部类切中要害围攻时,
普通用于教室设计,事物剖析,发如今撰文中除此之外其他的的东西。,同样东西依然在接见所撰文的事物的目录。,这是规定为内部CLA的其他的事物的规定。。

class Outer{

    privateint num=3;

    class Inner{void show(){

            零碎。out.println("show run..."努姆)
        }

    }
    publicvoidmethod(){

        Inner in=new Inner();in.show();
    }

}
publicclass InnerClassDemo {

    publicstaticvoidmain(字母行) ARGS)

        Outer outer=new Outer();
        ();
    }

}

指定遗传密码的第二十五行,输入显示 run…3”

二:使生色符
结构内部类的抱反感,率先需求结构内部类的抱反感,Outer.Inner inner=new 新的() Inner()

class Outer{

    privateint num=3;

        class Inner{void show(){

            零碎。out.println("show run...."努姆)
        }

    }
    publicvoidmethod(){

        Inner in=new Inner();in.show();
    }

}
publicclass InnerClassDemo {

    publicstaticvoidmain(字母行) ARGS)

        Outer.Inner inner=new Outer().new Inner();
        ();
    }

}

输入输入显示 run…3”。
假定它是动态内部类,相等于内部类,Outer.inner in = new outer.inter();

class Outer{

    privatestaticint num=3;static class Inner{void show(){

            零碎。out.println("show run...."努姆)
        }

    }
    publicvoidmethod(){

        Inner in=new Inner();in.show();
    }

}
publicclass InnerClassDemo {

    publicstaticvoidmain(字母行) ARGS)
        
        Outer.Inner inner=new Outer.Inner();
        ();
    }

}

假定内部类是动态的,围攻是动态的

class Outer{

    privatestaticint num=31;

    static class Inner{

        void show(){

            零碎。out.println("show run...."努姆)
        }
        staticvoid function(){

            零碎。out.println("function run...."努姆)
        }

    }
    publicvoidmethod(){

        Inner in=new Inner();
        in.show();
    }

}
publicclass InnerClassDemo {

    publicstaticvoidmain(字母行) ARGS)
        
        ();
    }

}

输入 function run….31
假定内部类规定动态围攻,内部类也应该是动态的。。

三:内部类各种细节

class Outer{

   int num=3;

     class Inner{

        int num=4;

        void show(){
            int num=5;
            零碎。out.println("show run...."努姆)
            零碎。out.println("show run...."+this努姆)
            零碎。out.println("show run...."内部的。this努姆)
        }

    }
    publicvoidmethod(){

        Inner in=new Inner();
        in.show();
    }

}
publicclass InnerClassDemo {

    publicstaticvoidmain(字母行) ARGS)
        new 方式(方式)
    }
}

为什么内部类可以直截了当地接见内部类的围攻?
鉴于内部类拿对内部类的援用 :内部类名

四:本土的内部类

class Outer{

   int num=3;
   void method(){

     final int x=9;
     class Inner{
        void show(){

            int num=5;
            零碎。out.println("show run...."+x);
        }
    }
    Inner inner=new Inner();
    ();
   }

}
publicclass InnerClassDemo {

    publicstaticvoidmain(字母行) ARGS)
        new 方式(方式)
    }
}

内部类可以储藏处在本土得第二名。,内部类要不是接见终极修正的本土变量。。

四:匿名内部类
匿名内部类是内部类的缩针产生,
应该有前提:内部类应该增加或许获得人家内部类或许轻摇
匿名内部类确实执意一哥匿名亚纲抱反感
体式:new 父类 or 轻摇(){亚纲目录}

abstract class Demo{

    abstractvoid show();
}
class Outer{

   int num=4;

publicvoidmethod(){

       new Demo(){void show(){

               零碎。out.println("show run...."努姆)
           }
       }.show();
   }
}
publicclass InnerClassDemo {

    publicstaticvoidmain(字母行) ARGS)
        new 方式(方式)
    }
}

经用的现场经过:
当职务限制因素是轻摇的典型时,接口中不存在三种方式
可以应用匿名内部类作为实践限制因素举行传送

interface Inter{

    void show1();
    void show2();
}
class Outer{

publicvoidmethod(){

        Inter inter=new Inter() {
            publicvoidshow1(){

            }
            publicvoidshow2(){

            }
        };
        ();
        ();
    }
}
publicclass InnerClassDemo {

    publicstaticvoidmain(字母行) ARGS)

           show(new Inter() {publicvoidshow1(){}
            publicvoidshow2(){}
        });
    }
    publicstaticvoidshow(国际) in) {
        in.show1();
        in.show2();

    }
}

五:匿名内部类各种细节

class Outer{

void method(){

        new Object(){

            publicvoidshow(){

                零碎。out.println("show run");
            }
        }.show();
    }
}
publicclass InnerClassDemo {

    publicstaticvoidmain(字母行) ARGS)

          new 方式(方式)
        }
}
有关注意事项:
class Outer{

    void method(){

        Object object=new Object(){

            publicvoidshow(){

                零碎。out.println("show run");
            }
        };
        object.show();
    }
}
publicclass InnerClassDemo {

    publicstaticvoidmain(字母行) ARGS)

          new 方式(方式)
        }
}

六:抱反感设定初值快速地流动

classFu
{
   Fu(){
       show();

   }
   void show(){

       ("hahhaa");
   }
}

classZiextendsFu{int num=9;
    Zi(){
        
        ("zi constructor..."+ 努姆)
    }
    void show(){

        ("show..."努姆)
    }
}

publicclassTest {publicstaticvoid main(字母行) ARGS)

        new Zi();
    }
}

从一边至另一边顺序输入:show…0
zi constructor…9

主要功能新 Zi时转乘亚纲的建造物职务。,在亚纲建造物职务中,将会有人家遮住的特级品,因而率先转乘父类的建造物职务(特级品),此刻没显示设定初值。,num的值为0,当父类的建造物职务中转乘Sead方式时,鉴于多态,给予亚纲的显示方式,且此刻没显示设定初值。,显示方式输入0,在给予父建造物职务继后,给予显示设定初值Num=9。

classFu
{int num=9;

   {

       ("Fu static code ");
   }
   Fu(){
       super();
       
       show();

   }
   void show(){

       ("fu show"努姆)
   }
}

classZiextendsFu{int num=8;

    {
        (" zi static code..."+ 努姆)

    }
    Zi(){
        super();
           
        show();
    }
    void show(){

        ("zi show..."努姆)
    }
}

publicclassTest {publicstaticvoid main(字母行) ARGS)

        new Zi();
    }
}

输入坐果:
Fu static code
zi show…0
zi static code…
zi show…8

给予快速地流动:
1)亚纲给予默许设定初值快速地流动,num=0
2)亚纲转乘特级品,父类的建造物职务(第三十当事人)
3)父类显示设定初值,num=9;(第三行)
4)建造物指定遗传密码块设定初值,输入符 static code (第七行)
5)父类的显示方式给予,但鉴于多型现象,亚纲的显示方式掩盖父类,num=0 (尽管在父类中设定初值num=9) ,然而亚纲的显示 num或0) (第十三行)
6) 亚纲显示设定初值,num=8;(第三十二行)
7)建造物指定遗传密码块显示设定初值,输入字 static code…(第三十三行)
8)转乘亚纲的显示,此刻先前显示了设定初值的值。,num=8;(第三十四点钟行)

发表评论

电子邮件地址不会被公开。 必填项已用*标注