Java学习笔记–匿名内部类
匿名内部类没有单独的类定义,它在创建对象的同时定义类
先看不使用匿名内部类的情况
创建一个接口Smoking
public interface Smoking{
public abstract void smoking();
}
然后实现类,实现接口,重写接口抽象方法,创建实现类对象
class A implements Smoking{
public void smoking(){
System.out.println("人在吸烟");
}
}
调用方式为
//子类调用
A a = new A();
a.smoking();
//或者接口多态调用
Smoking s = new A();
s.smoking();
匿名内部类,简化问题:定义实现类,重写方法,建立实现类对象,合为一步完成
下面看如何使用匿名内部类实现
public class Test{
public static void main(String[] args){
//使用匿名内部类
/*
*定义实现类,重写方法,创建实现类对象,一步搞定
*格式:
* new 接口或者父类(){
* 重写抽象方法
* };
* 从new开始到,到分号结束
* 创建接口的实现类的对象
*
* /
new Smoking(){
public void smoking(){
System.out.println("人在吸烟");
}
}.smoking(); //调用对象的smoking方法
}
}
运行结果为:人在吸烟
使用抽象类的情况
public abstract class Animal{
public abstract void eat();
public abstract void sleep();
}
使用匿名内部类实现
/*
* new Animal(){
* public void eat(){
* System.out.println("在吃饭");
* }
* public void sleep(){
* System.out.println("在睡觉");
* }
* };
* 以上代码,就是Animal的子类的对象
* 多态性,父类引用=子类的对象
* /
public class Test2{
public static void main(String[] args){
Animal a = new Animal(){
public void eat(){
System.out.println("在吃饭");
}
public void sleep(){
System.out.println("在睡觉");
}
};
a.eat();
a.sleep();
}
}
输出结果为: 在吃饭 在睡觉