/*
匿名内部类:
1,匿名内部类其实就是内部类的简写格式。
2, 定义匿名内部类的前提:
内部类必须是继承一个类或者实现接口。
3,匿名内部类的的格式:new 父类或者接口(){定义子类的内容}
4,其实匿名内部类其实就是一个匿名子类对象。而且这个对象有点胖。可以理解为带内容的对象
5,匿名内部类中定义的方法最好不要超过3个
*/
abstract class AbsDemo
{
abstract void show();
}
class Outer
{
int x = 3;
/*
class Inner extends AbsDemo
{
void show()
{
System.out.println("show :"+x);
}
}
*/
public void function()
{
//new Inner().show();
new AbsDemo()
{
int num = 9;
void show()
{
System.out.println("x="+num);
}
void abc()
{
System.out.println("abc");
}
}.abc();
AbsDemo d = new AbsDemo() //父类引用指向子类对象
{
void show()
{
System.out.println("x="+x);
}
void abc()
{
System.out.println("abc");
}
};
d.show();
//d.abc();//编译失败,父类中没有abc();方法
}
}
class InnerClassDemo4
{
public static void main(String[] args)
{
new Outer().function();
}
}
-------------------------------------------------------------------------------------------
interface Inter
{
void method();
}
class Test
{
/*
static class Inner implements Inter //内部类实现接口
{
public void method()
{
System.out.println("haha");
}
}
static Inter function()//注意返回的是Inter类类型的对象
{
return new Inner();
}
*/
//补足代码,通过匿名内部类
static Inter function()
{
return new Inter() //匿名内部类
{
public void method()
{
System.out.println("ha");
}
};
}
}
class InnerClassTest
{
public static void main(String[] args)
{
Test.function().method();
//Test.funtion():Test类中有function函数是静态的。
//.method():funtion这个方法运算后的结果是一个对象。而且是Inter类型对象。
//因为只有是Inter类型的对象,才可以调用method方法。
// Inter in = Test.function();
// in.method();
}
}
------------------------------------------------------------------------------------------------------------
class InnerTest
{
public void main(String[] args)
{
//new Object();//创建了一个Object对象
new Object() //创建Object子类对象
{
public void function()
{
}
}.function();
}
}
-------------------------------------------------------------------------------------
个人总结: