zoukankan      html  css  js  c++  java
  • 浅谈Java中的内部类

    最近在讲Java中的内部类,感觉内部类实际上对于初学者用得不多,那么内部类简单的说,其实就是在一个类的内部定义的类。

    按照定义的情况分为:成员内部类,局部内部类,静态内部类,匿名内部类。

    成员内部类,就是定义一个当作类的成员变量的类。

    局部内部类,就是在类里面定义一个当作局部变量的类,通常是在方法或代码块中使用。

    静态内部类,就是在类中定义一个静态变量,而该静态变量是一个类。

    匿名内部类,通常是在创建一个接口对象,该对象是在创建对象的同时实现接口,而该接口的实现只是在此处使用一次,所以不需要定义名字,称为匿名内部类。

    请看如下代码:

    public interface MyInter{

    public void method();

    }

    public class Outter {

    // public static int i; // 普通静态变量

    // 静态内部类

    public static class Inner3{

    }

    // public String name; // 普通成员变量

    // 成员内部类

    public class Inner1{

    }

    public void test() {

    // String n; // 普通局部变量

    // 局部内部类

    class Inner2{

    }

    // 匿名内部类,在运行时会生成一个临时的名字,类似:Outter$1.java

    MyInter in = new MyInter() {

    @Override

    public void method() {

    }

    };

    }

    }

    上面的代码展示了4种不同的内部类的情形。

    接下来看看这4种情形的具体用法。

    静态内部类:

    public class Outter {

    public int o1;

    public static int os1;

    public void om1() {

    System.out.println(Inner3.ns3);

    System.out.println(new Inner3().n3);

    System.out.println("om1");

    }

    public static void oms1() {

    System.out.println("oms1");

    }

    // public static int i;

    // 静态内部类

    public static class Inner3{

    // 在静态内部类中可以定义基本的成员和方法,以及静态成员和方法

    public int n3;

    public static int ns3;

    public void m3() {

    System.out.println("m3");

    }

    public static void ms3() {

    System.out.println(os1);

    oms1();

    System.out.println("ms3");

    }

    }

    }

    静态内部类的使用:

    public static void main(String[] args) {

    Outter.Inner3 i3 = new Outter.Inner3();

    i3.n3 = 3;

    Outter.Inner3.ns3 = 4;

    Outter.Inner3.ms3();

    i3.m3();

    }

    可以看到静态内部类和静态变量使用方式差不多,直接使用类名即可。

    成员内部类:

    //成员内部类

    public class Inner1{

    public int n1;

    public int o1;

    public void m1(int o1) {

    o1 = 1; // 局部变量

    this.o1 = 2; // 当前属性

    Outter.this.o1 = 4; // 外部属性

    om1();

    System.out.println("m1");

    }

    }

    成员内部类的使用:

    public static void main(String[] args) {

    // 调用

    Outter.Inner1 i1 = new Outter().new Inner1();

    i1.n1 = 3;

    i1.m1(3);

    }

    由于是成员,所以需要先创建对象才能使用。

    局部内部类和匿名内部类:相当于局部变量,只能在方法里面调用和创建对象等,可以调用外部的变量和方法,外部不能调用它。请看如下方法:

    public void test() {

    // String n;

    // 局部内部类

    class Inner2{

    public void m2() {

    o1 = 3;

    }

    }

    Inner2 i2 = new Inner2();

    i2.m2();

    // 匿名内部类,在运行时会生成一个临时的名字,类似:Outter$1.java

    MyInter in = new MyInter() {

    @Override

    public void method() {

    o1 = 3;

    }

    };

    in.method();

    }

    至此,内部类简单的使用基本就到这了。

  • 相关阅读:
    P2149 [SDOI2009]Elaxia的路线
    电机学第一次课
    大素数区间快判模板
    网络流 最大权闭合子图
    DFS CCPC2017 南宁I题
    稳定婚姻问题模板
    CF438D 线段树 区间求和,区间求膜,单点更新
    对偶图 并查集 BZOJ4423
    BZOJ 1833 数字计数 数位DP
    过一点求对一个直线的垂足
  • 原文地址:https://www.cnblogs.com/qfchen/p/11165088.html
Copyright © 2011-2022 走看看