Java内部类

1.    什么是内部类

将一个类定义在另一个类里面,在里面的那个类就称为内部类(内置类,或嵌套类)

2.    内部类的访问规则:

      i.         内部类可以直接访问外部类中的成员,包括私有成员。

     ii.         外部类要访问内部类中的成员必须要建立内部类的对象。

classOuter

{

   private int x = 1;

   class Inner

   {

      private int x = 2;

      private void founc()

      {

         int x = 3;

         System.out.println("founc_x ="+x);        

         System.out.println("inner_x ="+this.x);

         System.out.println("outer_x ="+Outer.this.x);

      }

   }

   void method()

   {

      Inner in = newInner();//外部类访问内部类要建立内部类对象

      in.founc();

   }

}

3. 内部类的位置

 i.     内部类定义在成员位置上

可以被private static成员修饰符修饰,被static修饰的内部类只能访问外部类中的静态成员

 ii.     内部类定义在局部位置上

也可以直接访问外部类中的成员,同时可以访问所在局部的局部变量,但必须是被final修饰的。同时不能被成员修饰符修饰

class Outer

{

   int x = 3;

   void method(final int z)

   {

      final int y = 4;

//内部类在局部位置,不能被成员修饰符修饰

      class inner

      {

         void founc()

         {

            System.out.println(x);//Outer.this.x

//此时只能访问final型局部变量

            System.out.println(y);

            System.out.println(z);

         }

      }

      new inner().founc();//非静态没对象不运行

   }

}

4. 匿名内部类:就是内部类的简写格式

 i.     定义匿名内部类的前提:

内部类 可以 继承一个类 或者 实现一个接口

 ii.     匿名内部类的格式:

new 父类名(或接口名){定义子类内容}

其实就是一个匿名子类对象

interface MyInterface

{

   public abstract void print();

}

class Outer

{

   int x = 3;

   /*

   class Inner implementsMyInterface

   {

      void print()

      {

         System.out.println("result---"+x);

      }

   }

*/

   void method()

   {

      //newInner().print();

      new MyInterface()//匿名内部类

      {

         public void print()

         {

            System.out.println("result---"+x);

         }

      }.print();

   }

}

 

5. 一个经典的匿名内部类的程序示例:

要求,根据主函数里面的语句补充接口定义和Test类中的内容

interface Inter

{

   void method();

}

class Test

{

   /*

   static class Innerimplements Inter  //内部类,成员位置

   {

      public voidmethod()

      {

         System.out.println("**methodrun**");

      }

   }

   */

   static Inter founction()

   {

      //returnnew Inner();

      return new Inter()

      {

         public void method()

         {

            System.out.println("methodrun");

         }

      };

   }

}

class  NamelessTest

{

   public static void main(String[]args)

   {

//关键在这个语句的解读

//Test.founction说明founction是静态,返回一个对象

      Test.founction().method();                       

   }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值