class Demo
{
public static void main(String []args)
{
new Outer().function();
}
}
/*
匿名内部类
1.匿名内部类其实就是内部类的间歇格式
2,定义内部类的前提
内部类必须继承一个类或者实现一个接口
3,匿名内部类格式:new父类或者接口(){定义子类内容}
4,其实匿名内部类就是一个匿名子类对象,可以理解为带内容的子类对象
*/
abstract class Abs
{
abstract void show();
}
class Outer
{
int x=3;
/*
class Inner extends Abs
{
void show()
{
System.out.println("show:"+x);
}
}
*/
public void function()
{
//new Inner().show();建立内部类对象调用内部类方法
//以下是匿名内部类,他是父类的子类的对象,因为只有子类才能复写抽象父类的抽象方法,他是以上注释部分的简化格式
//要创建子类对象,但子类没名字,所以用父类的;但父类是抽象类,不能建立对象,所以就加上{},里边加上子类复写的方法
/*
new Abs()
{
void show()
{
System.out.println("show:"+x);
}
void show1()//也可定义子类特有功能
{
System.out.println("show1:"+x);
}
}.show1();//匿名对象只能调用对象一次
new Abs()
{
void show()
{
System.out.println("show:"+x);
}
void show1()//也可定义子类特有功能
{
System.out.println("show1:"+x);
}
}.show();
*/
//发现要调用匿名内部类的多个方法要建立多个内部类,所以考虑建立一个对象
//但是内部类没名字,所以用父类类名,建立子类对象
//格式:父类名 对象名=new 父类名(){};
//有局限 不能执行父类中未定义的方法,调用方法一次只能调用一个
Abs a=new Abs()
{
void show()
{
System.out.println("show:"+x);
}
void abc()//该函数无实际意义,因为在父类对象中没有定义,所以执行不了,写匿名函数就是为了覆盖父类功能的
{
System.out.println("show:"+x);
}
};
a.show();
//a.abc 父类中没有定义,不能执行
}
} |
|