内部类

内部类

  1. 成员内部类

a)      就是定义在一个类的内部,而且与成员方法跟属性平级的内部类成为成员内部类,

                 i.          成员内部类不可以包含static关键字,即,不能声明静态属性,方法,代码块跟static静态区。

                ii.          成员内部类访问外部属性跟方法需要用外部类名.this.成员方法/属性

       

package com.test;

/**
 * Created by Administrator on 2017/6/26.
 */
public class Test {

    private String name = "外部类nme属性";
    public static void main(String[] args) {
        Test.Inner inner = new Test().new Inner();
    }

    class Inner{
        public Inner(){
            System.out.println(Test.this.name);
        }
    }
}

 

 

               iii.          在外部类中创建内部类的实例并且调用内部类的方法

      

package com.test;

/**
 * Created by Administrator on 2017/6/26.
 */
public class Test {

    private String name = "外部类nme属性";
    public static void main(String[] args) {
        Test.Inner inner = new Test().new Inner();
        inner.test();
    }



    class Inner{
        public void test(){
            System.out.println("外部类的测试方法");
        }
    }
}

 

当然内部类也可以存在构造方法,可以添加参数等操作。

               iv.          成员内部类可以使用private,protected,public,static,final,abstract来修饰

                v.          内部类在编译完成时会生成单独的class文件,文件为:

               vi.          外部类无法直接访问内部类的属性跟方法,只能先在外部类中建立内部类的实例,通过内部类的实例来访问内部类的属性跟方法。

  1. 静态内部类

a)      一般类是不可以用static修饰的,但是内部类可以用static修饰类名

     

package com.test;

/**
 * Created by Administrator on 2017/6/26.
 */
public class Test {

    private String name = "外部类nme属性";
    public static void main(String[] args) {
        Test.Inner inner = new Test.Inner();
        inner.test();
    }

    static class Inner{
        public void test(){
            System.out.println("外部类的测试方法");
        }
    }
}

 

 

b)      静态内部类跟外部类没有任何关系,只是在定义稍有变化,静态内部类可以看做跟外部类平级的类,使用方式跟外部类完全相同。

c)      静态内部类不能访问到外部类肥静态的属性跟方法,外部类也不能访问到内部类非静态的内容。

   

package com.test;

/**
 * Created by Administrator on 2017/6/26.
 */
public class Test {

    private String name = "外部类nme属性";
    public static String getString(){
        return "外部类String方法";
    }

    static class Inner{
        public static void main(String[] args) {
            System.out.println(Test.getString());
        }
    }
}

 

  1. 局部内部类

a)      定义在一个类的代码块中,方法体中的类成为局部内部类

  

package com.test;

/**
 * Created by Administrator on 2017/6/26.
 */
public class Test {
    {
         class Wyw{
            Wyw(){
                System.out.println("----------");
            }
        }
    }

    public void getString(){
        class Wyw{};
    }

}

 

b)      局部内部类只能在方法体中或在代码块中使用

c)      局部内部类访问外部类的属性跟方法的办法

   

package com.test;

/**
 * Created by Administrator on 2017/6/26.
 */
public class Test {

    private String name = "--------------";
    public static void main(String[] args) {
    }

    public void getString(){
        class Wyw{
            public void print(){
                System.out.println("内部了的print函数");
                System.out.println(Test.this.name);
            }
        }
    }
}

 

局部内部类基本上很少使用到,使用起来也很费劲,只做了解即可。

  1. 匿名内部类

a)      匿名内部类顾名思义就是没有名字的类

b)      因为没有名字,所以匿名内部类只能使用一次

c)      匿名内部类常常用来简化代码的编写

d)      匿名内部类常常用于多线程

   

有待项目开发中使用,理解

posted @ 2017-06-26 23:28  青春不打烊  阅读(107)  评论(0编辑  收藏  举报