首页 > 代码库 > 匿名内部类
匿名内部类
- 内部类是指在一个外部类的内部再定义一个类。
- 匿名内部类也就是没有名字的内部类。
- 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写。
- 使用匿名内部类的前提条件是必须继承一个父类或实现一个接口。
继承抽象类的匿名内部类
1 abstract class Person { 2 public abstract void eat(); 3 } 4 public class Demo { 5 public static void main(String[] args) { 6 Person p = new Person() { 7 public void eat() { 8 System.out.println("eat something"); 9 } 10 }; 11 p.eat(); 12 } 13 }
------------------------------------------------------------------------------------------------------------------------------------------------------------
实现接口的匿名内部类
1 interface Person { 2 public void eat(); 3 } 4 public class Demo { 5 public static void main(String[] args) { 6 Person p = new Person() { 7 public void eat() { 8 System.out.println("eat something"); 9 } 10 }; 11 p.eat(); 12 } 13 }
- 匿名内部类不能有构造方法;
- 匿名内部类不能定义任何静态成员、方法和类;
- 匿名内部类不能是public、protected、private、static;
- 只能创建匿名内部类的一个实例;
- 一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类;
- 因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效;
- 在匿名类中用this时,这个this指的是匿名类本身。如果我们要使用外部类的方法和变量的话,应该加上外部类的类名。
- 匿名内部类常用在多线程的实现上,因为要实现多线程必须继承Thread类或是实现Runnable接口。
Thread类的匿名内部类实现
1 public class ThreadDemo { 2 public static void main(String[] args) { 3 Thread thread = new Thread() { 4 public void run() { 5 for (int i = 1; i <= 5; i++) { 6 System.out.print(i + " "); 7 } 8 } 9 }; 10 thread.start(); 11 } 12 }
等价的非匿名内部类实现
1 class MyThread extends Thread { 2 public void run() { 3 for (int i = 1; i <= 5; i++) { 4 System.out.print(i + " "); 5 } 6 } 7 } 8 public class ThreadDemo { 9 public static void main(String[] args) { 10 MyThread thread = new MyThread(); 11 thread.start(); 12 } 13 }
Runnable接口的匿名内部类实现
1 public class RunnableDemo { 2 public static void main(String[] args) { 3 Runnable r = new Runnable() { 4 public void run() { 5 for (int i = 1; i <= 5; i++) { 6 System.out.print(i + " "); 7 } 8 } 9 }; 10 Thread thread = new Thread(r); 11 thread.start(); 12 } 13 }
等价的非匿名内部类实现
1 class MyThread implements Runnable { 2 public void run() { 3 for (int i = 1; i <= 5; i++) { 4 System.out.print(i + " "); 5 } 6 } 7 } 8 public class RunnableDemo { 9 public static void main(String[] args) { 10 MyThread r = new MyThread(); 11 Thread thread = new Thread(r); 12 thread.start(); 13 } 14 }
匿名内部类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。