java的内部类

来源:互联网 发布:java reentrantlock 编辑:程序博客网 时间:2024/05/29 12:29

成员内部类:

1、 Inner 类定义在 Outer 类的内部,相当于 Outer 类的一个成员变量的位置,Inner 类可以使用任意访问控制符,如 public 、 protected 、 private 等

2、 Inner 类中定义的 test() 方法可以直接访问 Outer 类中的数据,而不受访问控制符的影响,如直接访问 Outer 类中的私有属性a

3、 定义了成员内部类后,必须使外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

 外部类是不能直a接使用内部类的成员和方法滴

//外部类 HelloWorld

public class HelloWorld{

       //内部类 Inner在HelloWorld的类中//

       public class Inner{

      //内部类方法//

      public void show(){

             system.out.println("welcome to java");

            }

        }

     public void print(){

         show();  //错误  外部类不能直接访问内部类//

        }

}

1、可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。

2、 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字。如:外部类.this.成员

 //创建外部类的对象
  HelloWorld o = new HelloWorld ();
       
        //创建内部类的对象
  Inner inn = o.new Inner();

静态内部类:

1、 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问 

2、 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

//外部类

public class SOuter{

      private int a=99;//外部变量的私有变量///

      static int b=2;//外部变量的静态变量//

     //静态内部类//

     public static class SInner{

             int b=2;//内部类变量//

            public  void test(){

                     system.out.pritnln("外部类的b值为:"+SOuter.b);

                     system.out.println("内部类的b值为:"+b);

                   }

          }

          //测试静态内部类//

         public static main(String[]  args){

                   SInner  si=new SInner();//直接创建内部类对象//

                   si.test();//调用test方法

          }

方法内部类

方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。

//外部类

public class MOuter{

           //外部类方法//

           public void show(){

                       final int a=25;//常量//

                       int b=13;//变量//

                      //方法内部类//

                      class MInner{

                               int c=20;

                               public  void pritn(){

                                      system.out.pritnln("访问内部类c:"+c);

                                      system.out println("访问外部类a:"+a);

                     }

           }

           MInner mi =new MInner();//创建方法内部类对象

           mi.print();//调用内部类方法

     }

     //测试方法内部类//

     public static void main(String[]  args){

                     MOuter  mo=new MOuter();//创建外部类对象

                     mo.show;

                }

}

一定要注意哦:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符。

1 0
原创粉丝点击