浅谈Java中的内部类
Posted gcghcxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈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();
至此,内部类简单的使用基本就到这了。
以上是关于浅谈Java中的内部类的主要内容,如果未能解决你的问题,请参考以下文章
浅谈Java中的StringStringBufferStringBuilder