匿名内部类及与接口和抽象类的关系
Posted 写Bug的渣渣高
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匿名内部类及与接口和抽象类的关系相关的知识,希望对你有一定的参考价值。
匿名内部类是什么
定义在外部类的内部,比如方法中,并且没有类名(由系统直接分配,若用debug查看变量,显示的是外部类名.$数组)
匿名内部类可以访问外部类的私有属性和私有方法,不能添加修饰符
public class Anonymous
public static void main(String[] args)
Outer outer = new Outer();
outer.tiger.cry();
outer.dog();
interface IA
void cry();
class Outer
//如果要使用IA接口,并创建对象,传统方式是写一个类实现接口并创建对象
//但是这个类只需要使用一次所以使用匿名内部类来简化开发
//匿名内部类的名字由系统自动分配,需要使用对象.getclass
//接口其实是无法new的,但是这里通过大括号并实现其中的方法,是的其可以创建并且将地址传递给tiger
//匿名内部类只能使用一次,但是已经创建的tiger可以多次使用
IA tiger=new IA()
@Override
public void cry()
System.out.println("老虎狂啸");
;
public void dog()
IA dog = new IA()
@Override
public void cry()
System.out.println("小狗汪汪");
;
new Father()
@Override
publi void ih()
sop("匿名内部类调用了hi方法")
.hi();//这样甚至都不用创建变量,直接调用
//体现了匿名内部类的对象的特征
Father father=new Father("jack")
//匿名内部类中不能重写构造器,不能创建特有方法
//运行类型是Outer$3
//这里可以重写father的方法
//这里相当于继承了一个类,省去了创建不必要的新的子类
@Override
public void test()
super.test();
;//这里有大括号,所有是匿名内部类
// Father father=new Father("jack");这里是直接创建father对象
class Father
String name;
public Father(String name)
this.name=name;
public void test()
System.out.println("name="+name);
匿名内部类可以当成实参直接传递
```Java
class m
public static voie main(String[] args)
f1(new IL()//注意这里的用法,原本接口时无法new的,但是这里使用了并实现了方法
@Override
public void show()
sop("这是一副名画");
//当作实参直接传入,否则就需要用一个类继承接口在new之后调用,
);
publc static void f1(IL il)
il.show();
interface IL
void show();
以上是关于匿名内部类及与接口和抽象类的关系的主要内容,如果未能解决你的问题,请参考以下文章