java中的内部类

Posted yikaer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的内部类相关的知识,希望对你有一定的参考价值。

一:静态内部类

1.静态内部类可以等同看做静态变量,内部类的重要作用是可以访问外部类中私有的数据;

2.静态内部类中可以访问外部类中静态的变量和方法,无法访问成员变量和成员方法(静态上下文中无法访问非静态的变量和方法);

public class Outerclass{

  //静态变量

  private static String s1 = "A";

  //成员变量

  private String s2 = "B";

  //静态方法

  private static void m1(){

    System.out.println(static‘s m1 method execute!);

  }

  //成员方法

  private void m2(){

    System.out.println(m2 method execute!);

  }

  //定义静态内部类

  static class Innerclass{

    //静态方法

    public static void m3(){

      System.out.println(s1);

      m3();

      //以下成员变量,成员方法无法访问

      //System.out.println(s2);

      //m4();

    }

    //成员方法

    public void m4(){

      System.out.println(s1);

      m3();

      //在静态内部类中,以下成员变量,成员方法无法访问

      //System.out.println(s2);

      //m4();

    }

  }

  public static void main(String args[]){

    //因为m3方法是静态方法,所以用"类名."的方法访问

    Outerclass.Innerclass.m3();

    //方法成员方法必须创建对象

    Innerclass inner = new Outerclass.Innerclass();

    Inner.m4();

  }

}

 

二:成员内部类

1.成员内部类可以等同看做成员变量;

2.成员内部类中不能有静态声明;

3.成员内部类中的成员方法中可以访问外部类中的所有数据,包括静态变量,静态方法;

public class Outerclass{

  //静态变量

  private static String s1 = "A";

  //成员变量

  private String s2 = "B";

  //静态方法

  private static void m1(){

    System.out.println(static‘s m1 method execute!);

  }

  //成员方法

  private void m2(){

    System.out.println(m2 method execute!);

  }

  //定义成员内部类

  class Innerclass{

    //成员内部类中不能有静态声明

    //public static void m3(){}

    //成员内部类中的成员方法可以访问外部类中的所有数据

    public void m4(){

      System.out.println(s1);

      m3();

      System.out.println(s2);

      m4();

    }

  }

  public static void main(String args[]){

    //成员方法必须创建对象,但与静态内部类的访问有所不同

    //先创建外部类对象,在通过“外部类对象.”的方式创建内部类对象

    Outerclass oc = new Outerclass();

    Innerclass inner = oc.Innerclass();

    Inner.m4();

  }

}

 

三:局部内部类

1.局部内部类可以等同看做局部变量,不能用访问控制权限修饰符修饰;

2.局部内部类中访问的局部变量必须用final关键字修饰;

3.局部内部类中不能有静态声明;

public class Outerclass{

  public void m1(){

    //局部变量,必须用final修饰

    final int i = 10;

    //声明局部内部类

    class Innerclass{

      //成员方法

      public void m2(){

        System.out.println(i);

      }

    }

    //要想在m1方法之外调用m2方法,必须在m1方法内部创建对象

    Innerclass inner = new Innerclass();

    inner.m2();

  }

  public static void main(String args[]){

    Outerclass oc = new Outerclass();

    oc.m1();

  }

}

 

四:匿名内部类

1.匿名内部类是指类没有名字;

2.匿名内部类的优点:可以少定义一个类;缺点:代码无法重复使用

public class Test{

  public static void t(CustomerService cs){

    cs.logout();

  }

  public static void main(String args[]){

    //第一种方法:使用匿名内部类调用t方法,在匿名内部类中重写logout方法,作为参数传到t方法中

    Test.t(new CustomerService(){

      public void logout(){

        System.out.println("程序已安全退出!");

      }

    });

    //第二种方法:因为接口不能创建对象,所以创建接口实现类的对象

    Test.t(new CustomerServiceImpl());

  }

}

//定义一个接口

interface CustomerService{

  void logout();

}

//使用类实现接口

class CustomerServiceImpl implements CustomerService{

  public void logout(){

    System.out.println("程序已安全退出!");

  }

}

以上是关于java中的内部类的主要内容,如果未能解决你的问题,请参考以下文章

java学习中,成员内部类匿名内部类(java 学习中的小记录)

Java中的内部类(回调)

Java中的四种内部类总结

浅谈Java中的内部类

JAVA中的内部类

java中的内部类