/**
*@author:StormMaybin
*@Date:20160425
*/
最近看到了java内部类和匿名内部类,所以写篇博客加强记忆!
所谓内部类就是定义在类中的类,那么匿名内部类就是定义在内部类中没有类名的类!废话不多说,直接码代码来分析:
class Outer
{
private double PI = 3.14;
class Inner
{
public void function()
{
System.out.println ("PI = "+PI);
}
}
void method ()
{
new Inner().function();
}
}
class InnerClassDemo
{
public static void main (String [] arguments)
{
new Outer().method ();
}
}
这个代码中,Outer类是个外部类,在Outer里面有个Inner类就是内部类,在Inner内部类可以访问外部类中的成员变量。
下面看看这个代码:
abstract class Demo
{
abstract void function();
}
class Outer
{
class Inner extends Demo
{
void function()
{
System.out.println ("Inner run!");
}
}
void method ()
{
new Inner().function();
}
}
class InnerClassDemo
{
public static void main (String [] arguments)
{
new Outer().method ();
}
}
在这个代码里面Demo是个抽象类,里面有function抽象方法,Inner这个内部类继承了Demo这个抽象类并对function方法进行override;
有了上面这两个代码做基础,那么理解匿名内部类就很简单了。
abstract class Demo
{
abstract void function();
}
class Outer
{
/*
class Inner extends Demo
{
void function()
{
System.out.println ("Inner run!");
}
}
*/
public void method ()
{
//new Inner().function();
new Demo()
{
void function()
{
System.out.println ("Inner Run!");
}
}.function();
}
}
class InnerClassDemo
{
public static void main (String [] arguments)
{
new Outer().method ();
}
}
在这个代码里面,新加的内容是对注释的内容的替代,顾名思义,匿名内部类,没有类名怎么创建对象呢!可以创建一个父类的对象来调用它方法,
所以,可以得出来结论,匿名内部类必须实现接口或者继承一个父类!