内部类的概念:一个类定义在另外一个类的内部,该类叫做内部类。
内部类的分类:
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(){ @Overridepublic void test1() {System.out.println("我是test1");} }.test1(); new A() {@Overridepublic void test2() {System.out.println("我是test2");}}.test2();} }
新闻热点
疑难解答