内部类的概念:一个类定义在另外一个类的内部,该类叫做内部类。
内部类的分类:
1.成员内部类
2.局部内部类
3.静态内部类.
4.匿名内部类
成员内部类:
作为外部类的一个实例成员
外部类.内部类 对象名=外部类对象.new 内部类();
一个类对应一个字节码文件,一个内部类会产生一个字节码文件
内部类可以使用修饰符,成员内部类只能定义实例成员。
以下是例子:
package inner;
public class Outer {
int a=2;
void test1(){}
class inner{
int r=9;
int b=3;
void test3(){
}
void test2(){
}
}
}
package inner;
public class TestInner {
public static void main(String[] args) {
Outer out = new Outer();
out.a=3;
out.test1();
Outer.inner inner = out.new inner();
inner.b=3;
}
}
局部内部类:定义在方法或代码块中的类
例子如下:
package inner;
public class Out2 {
int a;
public void test1() {
// TODO Auto-generated method stub
}
public void s(){
class inner2{
int a,b;
public void test1(){
}
}
inner2 in2 = new inner2();
}
}
静态内部类:定义在类成员位置的并用static修饰的类
例子如下:
package inner;
public class Out3 {
static int
a=7;
public static class inner3{
int b=9;
//static int a =11;
public static void function() {
// TODO Auto-generated method stub
System.out.println("lllll");
}
void fun(){
}
}
package inner;
public class Testinner3 {
public static void main(String[] args) {
Out3 out = new Out3();
out.a=9;
Out3.inner3.function();
}
}
匿名内部类:
1.继承一个父类(一般为抽象类),或实现一个接口
2.没有名字
3.定义时立即使用,有且仅能使用一次
测试代码如下:
package inner;
public interface I {
void test1();
}
package inner;
public abstract class A {
public abstract void test2();
}
package inner;
public class Test1 {
public static void main(String[] args) {
new I(){
@Override
public void test1() {
System.out.println("我是test1");
}
}.test1();
new A() {
@Override
public void test2() {
System.out.println("我是test2");
}
}.test2();
}
}