10.内部类

来源:互联网 发布:彩票计划软件 源代码 编辑:程序博客网 时间:2024/06/06 02:28
1.关于静态内部类
   (1).静态内部类可同等看作静态变量
     内部类的重要作用:可以访问外部类中私有数据

   (2).静态内部类可以直接访问外部类的静态数据,无法直接访问成员

class outter{//成员变量private int c1 = 1;    //静态变量private static int c2 = 2;//成员方法private void m1(){System.out.println("m1 method");}//静态方法private static void m2(){System.out.println("m2 method");}static class inner{   //定义静态方法m3()public static void m3(){System.out.println(c2);m2();} //定义成员方法m4() public void m4(){ System.out.println(c2); m2(); }  }}//编译后生成outter$inner.class 和 outter.class 和test.class三个.class文件(前者的$代表内部类)public class test{public static void main(String[] args){outter.inner.m3();//静态方法直接通过类名调用outter.inner in = new outter.inner();in.m4();//成员方法通过对象调用}}

 2.关于成员内部类:
    1.成员内部类可以等同看作成员变量
2.成员内部类不能由静态声明
3.成员内部类能访问外部所有数据

class outter{//成员变量private int c1 = 1;    //静态变量private static int c2 = 2;//成员方法private void m1(){System.out.println("m1 method");}//静态方法private static void m2(){System.out.println("m2 method");}class inner{   //定义静态方法m3()//public static void m3(){}报错,因为成员内部类不能有静态声明 //定义成员方法m4() public void m4(){ System.out.println(c1); m1(); System.out.println(c2); m2(); }  }}//编译后生成outter$inner.class 和 outter.class 和test.class三个.class文件(前者的$代表内部类)public class test{public static void main(String[] args){outter out = new outter();outter.inner in = out.new inner();in.m4();//成员方法通过对象调用/*刚开始调用时还是写成outter.inner in = new outter.inner();  但是会报错:需要包含outter.inner的封闭实例   因为上面的静态类可以直接通过外部类名.的方式调用      而成员内部类需要先创建外部类对象,再通过对象.的方式创建内部类对象*/}}

3. 关于成员内部类:
        1.局部内部类可以等同看作局部变量

2.局部内部类在访问局部变量的时候,必须用final修饰

class outter{public void m1(){final int i = 10;class inner{public void m2(){System.out.println(i);}}}}
4.关于匿名内部类

匿名内部类:指的是类没有名字

public class test{//静态方法public static void t(CustomerService cs){  cs.logout();}//入口public static void main(String[] args){//使用匿名内部类方式执行t方法//整个这个"new CustomerService(){}"就是个匿名内部类t(new CustomerService(){  public void logout(){    System.out.println("exit");  }});//匿名内部类的优点:少定义一个类//缺点:无法重复使用}}//接口interface CustomerService{void logout();}