黑马程序员_java 内部类

来源:互联网 发布:c语言不等于0怎么表示 编辑:程序博客网 时间:2024/06/13 17:04
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! 
----------------------


1.内部类定义:也称为嵌套类,是定义在一个类内部的类。

当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物在使用外部事物;

class Body

{

  private class Heart

  {

    

  }

  public void method()

  {

     new Heart().

  }

}

2.内部类的访问规则

    (1)内部类可以直接访问外部类的成员,包括私有成员;

       之所以能直接访问外部类的成员,是因为内部类中持有一个外部类的引用,格式是:外部类名.this

    (2)外部类要访问内部类,必须建立内部类对象。

3.访问格式

    (1)当内部类定义在外部类成员位置上且非私有时,可以在外部其他类中直接建立内部类对象访问。

            格式:外部类.内部类 变量名=外部类对象.内部类对象;

            Outer.Inner  in=newOuter().new Inter();

    (2)当内部类在成员位置上时,可以被成员修饰符修饰

        private 将内部类在外部类中封装;

        static 内部类具备了静态属性,当内部类被static修饰后只能访问外部类中的static成员,出现了访问权限;

    (3)在外部其他类中直接访问静态内部类的非静态成员

            new Outer.Inner().method();

    (4)在外部其他类中直接访问静态内部类的静态成员

            Outer.Inner.method();

        class Outer

{

    private static  int x = 8;

    static class Inner//静态内部类

    {

       static void function()

       {

           System.out.println("innner :"+x);

       }

    }

    static class Inner2

    {

       void show()

       {

           System.out.println("inner2 show");

       }

    }

    public static void method()

    {

       //Inner.function();

       new Inner2().show();

    }

}

class  InnerClassDemo

{

    public static void main(String[]args)

    {

       Outer.method();

       /*Outer.Inner.function();//访问内部类中的静态成员(类名直接调用)

       newOuter.Inner().function();//访问内部类中的非静态成员(创建内部类对象调用)

      

       直接访问内部类中的成员。

       Outer.Innerin = new Outer().new Inner();//创建内部类对象

       in.function();*/

    }

}

    注意:当内部类定义了静态成员,该类必须是静态的;当外部类中的静态方法访问内部类时,内部类也必须是静态

   

    内部类定义在局部时:

        (1)不可以被成员修饰符修饰;

        (2)可以直接访问外部类中的成员,应为还持有外部类中的引用;但是不可以访问它所在的局部中的变量,只能

           访问被final修饰的局部变量。

 

    匿名内部类:(事件监听时常用)

        (1)匿名内部类其实就是内部类的简写格式;

        (2)定义匿名内部类的前提:内部类必须是继承一个类或者实现一个接口;

        (3)匿名内部类的格式:new父类或者接口() {定义子类内容}

        (4)匿名内部类中定义的方法最好不要超过三个;

        (5)匿名内部类就是一个匿名的子类对象。

interface Inter

{

    void method();

}

class Test

{

    /*static Inter fuction()//匿名内部类

    {

       return new Inter()

       {

           publicvoid method()

           {

              System.out.println();      

           }

       };

    }*/

}

class TestDemo{

    public static void main(String[]args) {

       Test.fuction().method();//通过这句代码补全所需代码

       /*

        * Test.fuction() 说明fuction()方法是静态的

        * Test.fuction()可以调用method()说明Test.fuction()运行后结果是一个对象,故

           fuction()函数的返回类型可以确定

        * */

    }

}



---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! 
----------------------
原创粉丝点击