- 匿名内部类是局部内部类的更深入一步。
- 假如只创建某类的一个对象时,就不必将该类进行命名。
- 匿名内部类的前提是存在一个类或者接口,且匿名内部类是写在方法中的。
- 只针对重写一个方法时使用,需要重写多个方法时不建议使用
- 格式:
new 类名或接口名(){ 重写方法; }; //注意分号 //以上就是内部类的格式,其实这整体就相当于是new出来的一个对象
-
不使用匿名内部类来实现抽象方法
abstract class Animals { public abstract void jump(); } public class Cat extends Animals { @Override public void jump() { System.out.println("猫会跳"); } } public class main { public static void main(String[] args) { Animals animals = new Cat(); animals.jump(); } }
-
匿名内部类的实现
abstract class Animals {
public abstract void jump();
}
public class main {
public static void main(String[] args) {
Animals animals = new Animals() {
@Override
public void jump() {
System.out.println("猫会跳");
}
};
animals.jump();
}
}
- 在接口上实现内部类
interface Animals {
void jump();
}
public class main {
public static void main(String[] args) {
Animals animals = new Animals() {
@Override
public void jump() {
System.out.println("猫会跳");
}
};
animals.jump();
}
}
最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接
- thread类的匿名内部类的实现
public class main {
public static void main(String[] args) {
Thread thread = new Thread(){
public void run(){
for (int i=0;i<3;i++){
System.out.println(i);
}
}
};
thread.start();
}
}
- Runnable接口匿名内部类的实现
public class main {
public static void main(String[] args) {
Runnable runnable = new Runnable(){
public void run(){
for (int i=0;i<3;i++){
System.out.println(i);
}
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}