`
shangyixue
  • 浏览: 616 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

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) {

        Person p = new Child();

        p.eat();

    }

}


运行结果:eat something

可以看到,我们用Child继承了Person类,然后实现了Child的一个实例,将其向上转型为Person类的引用

但是,如果此处的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
分享到:
评论

相关推荐

    170331-01.匿名内部类总结.java

    170331-01.匿名内部类总结.java 170331-01.匿名内部类总结.java 匿名 内部类 总结 java

    java中匿名内部类详解

    主要对java中的匿名内部类的详细总结,需要的朋友可以参考下

    java中的匿名内部类详细总结

    以下是对java中的匿名内部类进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助

    JAVA语法总结 - 内部类

    内部类分为成员内部类、静态嵌套类、方法内部类、匿名内部类。 几种内部类的共性: A、内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类命和$符号。 B、内部类不能...

    java内部类总结(含概念和实例)

    最全面的java内部类总结,概念和实例帮助深入理解!

    java语言--内部类总结

    1,概述 2,分类 3,使用方法分:A,成员内部类 B,局部内部类 C,静态内部类 D,匿名内部类等,讲解详细,附有相应代码,,,

    java内部类学习资料

    java内部类学习资料,包括成员内部类,匿名内部类,以及内部类代码,和内部类相关总结

    JAVA 面向对象程序设计第8章 内部类和泛型.pptx

    8.3.1 匿名内部类的实现 ;8.3.1 匿名内部类的实现 ;8.3.1 匿名内部类的实现 ;8.3.1 匿名内部类的实现 ;8.3.2 学生实践练习;8.3.3 学生实践练习;8.3.3 学生实践练习;8.4 泛型;8.4.1 泛型概述;8.4.1 泛型概述;8.4.2 ...

    java中的内部类内部接口详解

    文章目录简介内部类静态内部类非静态内部类静态方法内部类非静态方法的内部类匿名类内部接口总结 简介 一般来说,我们创建类和接口的时候都是一个类一个文件,一个接口一个文件,但有时候为了方便或者某些特殊的原因...

    内部类使用的思维导图

    对于Java内部类的使用进行总结,根据语法,特征,注意事项等创建出的关于内部类的思维导图,欢迎下载使用!编辑软件freemind

    Java 匿名内部类详解及实例代码

    主要介绍了Java 匿名内部类详解及实例代码的相关资料,需要的朋友可以参考下

    Java内部类的一些总结

     内部类分为: 成员内部类、局部内部类、静态嵌套类、匿名内部类 。  1.成员内部类  成员内部类是普通的内部类,它的定义为位于另一个类的内部,形如下面的形式:  class Outter {  private int age = 12;...

    Java 内部类

    Java内部类学习总结,供他人参考

    java 面试题 总结

    声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    1.4.1 类(Class):Java世界中一类物体 14 1.4.2 方法(Method):物体的功能 15 1.4.3 main()方法:所有Java程序执行的起点 15 .1.5 名词解释 16 1.5.1 JDK和Java平台 16 1.5.2 Java编译器(Java Compiler)...

    java常用及 总结

    列举了java常用开发类 及开发心得 设计SE的内容 WEB内容 以及android常用的匿名内部类

    java基础知识总结

    非常全的java基础知识总结,包括线程,IO,堆栈,内部类,匿名类,面试题等等

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    1.4.1 类(Class):Java世界中一类物体 14 1.4.2 方法(Method):物体的功能 15 1.4.3 main()方法:所有Java程序执行的起点 15 .1.5 名词解释 16 1.5.1 JDK和Java平台 16 1.5.2 Java编译器(Java Compiler)...

Global site tag (gtag.js) - Google Analytics