java中的内部类比c++中的嵌套类功能更多,应用更广,java中的内部类的好处就内部类具有访问特权,可以访问外部类中私有成员,在这里我们不去探讨内部类的原理,因为比较复杂,我们只看这么用,我们从例子出发;
java中的内部类分为以下几种:
1、最常见的拿一种,在一个类中定义一个类;
2、局部内部类,在一个方法中定义一个类,1中说的内部类是在类中直接定义的
3、匿名内部类,我们在阅读一些源码中,经常可以看到匿名类的使用,最简单的就是在多线程的例子中,如下
public static void main(String[] args) {
Thread t = new Thread() {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.print(i + " ");
}
}
};
t.start();
}
4、静态内部类,内部类中不需要引用外围类对象,我们就可以用static来声明这个内部类,用的比较少,本文中就不举例子了,我们主要看一下前面的三种
一、常见的内部类
/**
* 常见的内部类的使用
*/
public class Test200 {
public void test(){
Test t = new Test();
t.test();
}
class Test{
public void test(){
System.out.println("ok");
}
}
}
二、局部内部类(本例中我们在内部类访问了局部变量和外部类的私有变量)
/**
* 局部内部类;在函数中定义一个类
*/
public class Demo100 {
private static int c = 10;
public static void main(String[] args) {
test(10);
}
public static void test(final int b){
class Test{//局部内部类
void test(){
System.out.println(b);//应用了局部变量;要将局部变量声明为final,不然报错
System.out.println(c);//应用了类成员的私有变量
}
}
Test t = new Test();
t.test();
}
}
三、匿名内部类
注意: 使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口,
父类:
public abstract class Test {
abstract public void test();
}
匿名内部类中:
public static void main(String[] args) {
Test t = new Test()//匿名内部类
{
public void test(){//重写了父类中的test()方法
System.out.println("ok");
}
};
t.test();
}
以上是java中内部类的概念,例子没有什么用处,只是为了帮助大家理解一下概念!