匿名内部类
匿名内部类是没有名字的类,它主要是为了重写抽象类和接口中的抽象方法(全部)
下面通过代码演示可以清晰的感受到匿名内部类的用法及优点
1.省略继承的过程
public class NoName {
public static void main(String[] args) {
persion p1 = new xiaoming();
persion p1 = new persion();
p1.show();
}
}
//
abstract class persion{
abstract void show();
}
//
class xiaoming extends persion{
@Override
void show() {
System.out.println("我是小明");
}
}
这是在没有使用匿名内部类时常用的写法.
public class NoName {
public static void main(String[] args) {
persion p1 = new persion() {
@Override
void show() {
System.out.println("匿名内部类:小明");
}
};
p1.show();
}
}
//
abstract class persion{
abstract void show();
}
在通过使用匿名内部类的时候省去了创建xiaoming类去继承抽象类的过程.注意匿名内部类是隐式继承,不是不继承.
2.匿名内部类在接口中的使用
public class NoName {
public static void main(String[] args) {
nonameclass aa = new xiaoming();
aa.show();
}
}
interface nonameclass {
void show();
}
class xiaoming implements nonameclass{
@Override
public void show() {
System.err.println("我是小明");
}
}
上面代码是常见实现类重写接口中的抽象方法.
public class NoName {
public static void main(String[] args) {
nonameclass p1 = new nonameclass() {
@Override
public void show() {
System.out.println("匿名内部类小明");
}
};
p1.dodo();
}
interface nonameclass {
void show();
}
通过匿名内部类省略了创建实现类的过程.所以合理使用匿名内部类可以优化我们的代码.
匿名内部类写法:
new 父类构造器(参数列表)|实现接口()
{
//匿名内部类的类体部分
}
因为匿名内部类没有名字,为了方便理解可以这样想,没有类名,应该省去class与extends关键字
new (class xiaoming extends) persion{
@Override
void show() {
System.out.println("我是小明");
}
}