java中内部类的概念?

默认分类 未结 1 1990
_Fashion_yoyo
_Fashion_yoyo 2023-03-20 05:40
相关标签:
1条回答
  • 2023-03-20 05:57

    内部 类 内部 类有二种:成员式的(像外部类的属性)和区域式的(像外部类中的方法中的变量)。 一、成员式 该中的 内部 类有可分为:类级别(static声明的 内部 类)和对象级别 InnerClasses.java package innerClass; public class InnerClasses { private

    内部类

    内部类有二种:成员式的(像外部类的属性)和区域式的(像外部类中的方法中的变量)。

    一、成员式

    该中的内部类有可分为:类级别(static声明的内部类)和对象级别

    InnerClasses.java

    package innerClass;

    public class InnerClasses {

    private static String staticAttribute = " Outter class static attribute ";

    private String instantAttribute = "Outter class instant ";

    //对象级别的方法

    public void instantMethod(){

    System.out.println("Outter class instant method ");

    }

    //类级别的方法

    public static void staticMethod(){

    System.out.println("Outter class static method");

    }

    //类级别的内部类

    /**

    * 该内部类中的方法 必须方位外部类的类级别的属性和方法,否则不错。

    * 如:只能访问外部类的staticAttribute属性和staticMethod()方法

    * */

    public static class StaticInnerClass{

    public StaticInnerClass(){

    System.out.println("static Inner class ");

    }

    public void access(){

    System.out.println(staticAttribute);

    staticMethod();

    }

    }

    //对象级别的内部类

    /**

    * 该内部类可以访问外部类中的所有的方法和属性

    * */

    public class InstantInnerClass{

    public InstantInnerClass(){

    System.out.println("Instant Inner Class");

    }

    public void access(){

    System.out.println(instantAttribute);

    staticMethod();

    }

    }

    }

    内部类的访问方式:

    1、类级别的内部类 通过外部类的类名访问内部类

    2、对象级别的内部类,必须通过外部类的对象访问

    package innerClass;

    public class TestClass {

    public void callStaticInnerClass(){

    //用外部类的类名来访问

    InnerClasses.StaticInnerClass sic

    = new InnerClasses.StaticInnerClass();

    sic.access();

    }

    public void callInstantInnerClass(){

    //访问对象级别的内部类需要 外部类的对象才能访问

    //声明一个外部类的兑现ic

    InnerClasses ic = new InnerClasses();

    //对象访问 对象级别的内部类

    InnerClasses.InstantInnerClass iic ;

    iic = ic.new InstantInnerClass();

    }

    }

    抽象内部类

    Static修饰的内部抽象类 可以通过外部类的类名 访问到,被其他类继承

    成员级别的内部类抽象类,只能被该外部类中的其他的内部类继承

    二、区域式

    该中的内部类可分为:变量级别的和匿名级别

    变量级别的内部类即声明在方法中的类。该内部类不适用。

    匿名内部类。即没有类名的内部类。

    package innerClass;

    import java.awt.Frame;

    import java.awt.event.WindowAdapter;

    import java.awt.event.WindowEvent;

    public class AnonymousInnerClass {

    public static void main(String[] args){

    Frame f = new Frame("Anonymous Inner Class Example ");

    //该方法的参数是一个匿名内部类的应用

    f.addWindowListener(new WindowAdapter(){

    public void windowClosing(WindowEvent e){

    System.exit(0);

    }

    });

    f.setSize(200,200);

    f.setVisible(true);

    }

    }

    简单的说,内部(inner)类指那些类定义代码被置于其它类定义中的类;而对于一般的、类定义代码不嵌套在其它类定义中的类,称为顶层(top-level)类。对于一个内部类,包含其定义代码的类称为它的外部(outer)类。 1 Static member class(静态成员类) 类声明中包含“static”关键字的内部类。如以下示例代码, Inner1/Inner2/Inner3/Inner4就是Outer的四个静态成员类。静态成员类的使用方式与一般顶层类的使用方式基本相同。 1内部类的嵌套可以理解成类的链关系,在构造一个内部类(非static)的实例的时候,会将直接外层类的实例作为参数传进构造函数,而外层类的实例也是用其外层类的实例构造,所以是一种链状关系,内部的类可以使用所有外层的类的实例,而外层的类不能使用内层的类, 应用a.this(最外层类实例) ,a.b.c.this(链中某个外层的实例)。class TheOuter{class kk {class gg {int tt = 100;}}class aa {class bb {int jj = 10;class cc {{ int ff = TheOuter.aa.bb.this.jj;// 无法直接访问到gg不在链关系内System.out.println(ff);}}}}}2 创建一个内部类 new aa().new bb().new()cc 实际上是调用 外层类实例.new 本层构造函数()如果内部类是static的不需要外层类的实例 多个static嵌套的内部类的实例 aa.bb.cc test = new aa.bb.cc();3class a0 {class b0 {}}class vvv{class ff extends a0.b0 {// ff这里不是内部类也行ff(a0 kk){kk.super();}}}继承自内部类要调用父类的外层类的super()4class dd {void print(){System.out.println("dd.println is there");}class kk {kk(int i){}class cc {void pp() {System.out.println("****");}void ddpp() {dd.this.print();}}}}class aa {public static void main (String agrs[]) {dd.kk.cc test = new dd().new kk(10).new cc();test.ddpp();}}在类内部可以是使用外层类,但是如果生成一个实例的句柄就没有提供访问上层类的功能。5 this 是指本类的实例6 缺省的newclass cc {{new test();}class kk {{System.out.println("there kk");}}class test {{new kk();}class kk {{System.out.println("there test_kk");}}}}可以直接使用new,new的范围可以是 之际外层.this.new 和this.new 但是如果内层与外层出现同名类以内部优先7//当有链关系的时候要注意类不要重名class vv {class bb {} //!class kk {//class vv{} 这样就会出错class bb {} //!这样就不会出错}}8class a0 {class b0 {}}class vvv{class ff extends a0.b0 {// 不是内部类也行ff(a0 kk){kk.super();}}}继承自内部类要调用父类的外层类的super()9 匿名内部类interface oo {//oo(int g) {}int k = 10;void pt();}class pp {pp(int g) {}int get() {return 100;}}class me {/*interface oo {void pt();}*/class kk{oo testmed() {final int i = 10;int g = 100;return new oo() {int kk;{// 使用外面的东西要声名成final// 继承接口内部优先// 匿名内部类没有构造函数,只能使用块,初始化kk = i + k ;}public void pt() {System.out.println(kk);}};}pp testmed0() {return new pp(10){ // 继承自类public int get() {return super.get() * 10;}};}}}匿名内部类可以继承自接口也可以继承自类,继承自类的构造函数中 可以有参数。10class bf {interface kk {}class aa {// 接口能嵌套在接口中(不受*),或者嵌套在顶层,下面就不行//interface gg {}}}

    内部类是Java2中新出现的一种类。简单的说,内部(inner)类指那些类定义代码被置于其它类定义中的类;而对于一般的、类定义代码不嵌套在其它类定义中的类,称为顶层(top-level)类。对于一个内部类,包含其定义代码的类称为它的外部(outer)类。在编译之后,生成的编译文件中,内部类的名称为OuterClass$InnerClass.class,其中OuterClass是内部类所在的类的名字,InnerClass是该内部类的名字。

    在一个类的内部在声明一个类

    thinking in java第四版有详细介绍,自己看吧

    0 讨论(0)
提交回复