zoukankan      html  css  js  c++  java
  • Java笔记19:Java匿名内部类

    匿名内部类也就是没有名字的内部类。正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写。但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

     

    1:不使用匿名内部类来实现抽象方法

    abstract class Person {

        public abstract void eat();

    }

     

    class Child extends Person {

        public void eat() {

           System.out.println("Eat something!");

        }

    }

     

    public class Demo {

        public static void main(String[] args) {

           Child p = new Child();

           p.eat();

        }

    }

     

    运行结果:Eat something!

     

    可以看到,此处的Child类只使用一次,那么将其编写为独立的一个类岂不是很麻烦?

    这个时候就引入了匿名内部类

     

    2:匿名内部类的基本实现

    abstract class Person {

        public abstract void eat();

    }

     

    public class Demo {

        public static void main(String[] args) {

           Person p = new Person() {

               public void eat() {

                  System.out.println("Eat something!");

               }

           };

           p.eat();

        }

    }

     

    运行结果:Eat something!

     

    可以看到,我们直接将抽象类Person中的方法在大括号中实现了,这样便可以省略一个类的书写。

    匿名内部类还能用于接口上。

     

    3:在接口上使用匿名内部类

    interface Person {

        public void eat();

    }

     

    public class Demo {

        public static void main(String[] args) {

           Person p = new Person() {

               public void eat() {

                  System.out.println("Eat something!");

               }

           };

           p.eat();

        }

    }

     

    运行结果:Eat something!

     

    由上面的例子可以看出,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现。

    最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口。

     

    4:Thread类的匿名内部类实现

    public class Demo {

        public static void main(String[] args) {

           Thread t = new Thread() {

               public void run() {

                  for(int i = 1; i <= 5; i++) {

                      System.out.print(i + " ");

                  }

               }

           };

           t.start();

        }

    }

     

    运行结果:1 2 3 4 5

     

    5:Runnable接口的匿名内部类实现

    public class Demo {

        public static void main(String[] args) {

           Runnable r = new Runnable() {

               public void run() {

                  for(int i = 1; i <= 5; i++) {

                      System.out.print(i + " ");

                  }

               }

           };

           Thread t = new Thread(r);

           t.start();

        }

    }

     

    运行结果:1 2 3 4 5

  • 相关阅读:
    datalist标签
    meter标签
    audio标签
    video标签
    time标签
    figure标签
    正则收集
    js文字无缝滚动
    页面滚动到指定位置
    Css公共文件结构
  • 原文地址:https://www.cnblogs.com/grimm/p/6732521.html
Copyright © 2011-2022 走看看