1、什么是内部类
顾名思义,就是一个类定义在一个类里面
2、内部类的使用方法
(1).首先我们定义一个A.java类
class A{
int i;
class B{
int j;
int funB()
{
int result=A.this.i+this.j;
return result;
}
}
}
(2)定义一个test.java的类
class test
{
public static void main(String arg[])
{
A a=new A();
a.i=10;
A.B b=a.new B();
b.j=20;
System.out.println(b.funB()); //打印结果为30
}
}
方法:将这两段代码添加到记事本中,分别命名为A.java和tese.java,并将这两个文件放在D:\src目录下.打开命令行 输入D: 回车 再输入 cd src(进入D:\src目录下) 再输入 javac *.java(编译所有的.java文件) 最后执行 java test(会执行test类中的main函数 输出30)
注:编译完后会生成入下文件:(A$B.clas这个文件就是内部类所产生的)
运行结果:
总结:类B可以使用类A中的成员变量或成员方法,但不属于继承
一个内部类必定会关联一个外部类
3、匿名内部类的使用方法
(1)、定义一个接口 A.java
interface A
{
public void doSomething();
}
(2)、定义一个类 B.java
class B{
public void fun(A a)
{
System.out.println("B中的方法");
a.doSomething();
}
}
(3).定义一个类 test.java
class test{
public static void main(String arg[])
{
new B().fun(new A(){
public void doSomething(){
System.out.println("匿名");
}
});
}
}
结果:
总结:什么是匿名内部类呢? B类中的成员方法fun(A a)中的参数是A类的对象,并且在该成员方法中也调用了A类的对象的doSomething()方法,而实例化A的对象是在test.java类中进行的,并复写了doSomething()方法,既没有名字,又在test类中,因此叫做“匿名内部类”.