通常通过继承某个类或实现某个接口的方式来编写代码,可是有时候某一些代码仅仅使用一次,就没有必要写专门写一个子类或实现类了,能够採用匿名内部类的写法。最经常使用的场景是线程方面的应用。一、不使用匿名内部类 ①继承 abstract class Player {public abstract void play(); } public class FootBallPlayer extends Player {public void play(){System.out.println("踢足球");} } public class AnonymousInnerClassTest {public static void main(String[] args){Player p1 = new FootBallPlayer();p1.play();} } ②接口 interface IPlayer {public void play(); } public class IPlayFootballImpl implements IPlayer {public void play(){System.out.println("踢足球");} } public class AnonymousInnerClassTest {public static void main(String[] args){ IPlayer ip1 = new IPlayFootballImpl();ip1.play();} }二、使用匿名内部类 ①继承 abstract class Player {public abstract void play(); } public class AnonymousInnerClassTest {public static void main(String[] args){Player p2 = new Player() {public void play(){System.out.println("打篮球");}};p2.play();} } ②接口 interface IPlayer {public void play(); } public class AnonymousInnerClassTest {public static void main(String[] args){IPlayer ip2 = new IPlayer() {public void play(){System.out.println("打篮球");}};} }三、线程中的应用 实现线程的方法有两种:①继承Thread类 ②实现Runnable接口。给出用匿名类实现的样例: public class ThreadTest {public static void main(String[] args){// 继承Thread类Thread thread = new Thread() {@Overridepublic void run(){while (true){try{Thread.sleep(1000);System.out.println(Thread.currentThread().getName());System.out.println(this.getName());}catch (InterruptedException e){System.out.println(e.getMessage());}}}};thread.start();// 实现Runnable接口Thread thread2 = new Thread(new Runnable() {@Overridepublic void run(){while (true){try{Thread.sleep(1000);System.out.println(Thread.currentThread().getName());}catch (InterruptedException e){System.out.println(e.getMessage());}}}});thread2.start();} }
转载于:https://www.cnblogs.com/bhlsheji/p/4062330.html
转载请注明原文地址: https://win8.8miu.com/read-1552067.html