码迷,mamicode.com
首页 > 编程语言 > 详细

java中的内部类

时间:2019-11-20 21:53:28      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:关键字   eth   数据   stat   对象   string   创建对象   interface   外部   

一:静态内部类

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中的内部类

标签:关键字   eth   数据   stat   对象   string   创建对象   interface   外部   

原文地址:https://www.cnblogs.com/yikaer/p/11900759.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!