您的位置:首页 > 编程语言 > Java开发

java学习笔记day06---匿名内部类

2014-10-26 17:50 489 查看
1.匿名内部类:其实就是内部类的简化形式,它所体现的就是一个类或者接口的子类对象。
前提:
内部类必须继承或实现外部类或接口。

格式:
new 父类&接口(){};
其实就是一个子类对象,用{};结束

匿名内部类在程序中的体现形式有三种:
1.父类为普通的类

class Inter{

}

class OuterTest{

public static void function(){

new Inter(){

private int num = 9;
void show(){
System.out.println("这是Inter子类的成员变量num="+num);
}
}.show();
/*
若改以上代码为:编译时就会报错了,因为编译时检查左边类型Inter类中并没有show()方法
Inter in = new Inter(){};
in.show();
*/
}
}

class  MyOuterDemo
{
public static void main(String[] args)
{
OuterTest.function();
}
}


2.父类为抽象类(子类中一定要覆盖抽象方法)

2.父类为抽象类(子类中一定要覆盖抽象方法)
abstract class Test{

abstract void show();
}

class Outer{
int x = 8;

/* 这是匿名内部类的完整形式
class Inter extends Test{

void show(){
System.out.println(x);
}
}
*/

public void method(){

//new Inter().show();

Test t = new Test(){

void show(){
System.out.println("x="+x);
System.out.println("这是覆盖Test抽象类中的方法,因为子类继承它就必须覆盖");
}

void show1(){
System.out.println("这是Test子类自己的方法");
}

};
t.show();
//t.show1();运行这个里会报错,因为Test抽象类中并没有show1()方法

}
}

class OuterInterDemo
{
public static void main(String[] args)
{
new Outer().method();

}
}


3.父类为接口interface

interface Inter{
void show();
}

class Outer{

static Inter method(){

return new Inter(){

public void show(){
System.out.println("show run");
}
};

}
}

class OuterTest1
{
public static void main(String[] args)
{
Outer.method().show();
/*
上面一句,相当于:
Inter in = Outer。method();
in.show();
*/
}
}


什么时候使用匿名内部类?
当函数的参数是一个接口类型时,该接口中的方法不超过3个的时候(因为方法过多时,产生匿名内部类的方法就变得太臃肿了),为了简化代码,将匿名内部类作为参数进行传递。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: