zoukankan      html  css  js  c++  java
  • JAVA- 内部类及匿名内部类

    普通类,我们平时见到的那种类,就是一个后缀为.java的文件中,直接定义的类,比如

    public Cat{
      private String name;
      private int age;
    }

    内部类,

    内部类。顾名思义,就是包含在外部类中的类,就叫内部类。内部类有两种,一种是静态内部类,一种是非静态内部类。

    静态内部类和非静态内部类的区别主要如下:

    1、内部原理的区别:

    静态内部类是属于外部类的成员, 是一种静态的成员,是属于类的,就有点类似于private static Singleton instance = null; 

    非静态内部类,是属于外部类的实例对象的一个实例成员,也就是说,每个非静态内部类, 不是属于外部类的,是属于外部类的第一个实例的,创建非静态内部类的实例以后,非静态内部类实例,是必须跟一个外部类的实例进行关联和有寄存关系的。

    2、创建方式的区别

     静态内部类

    public class School {
        private static School instance = null;
        static class Teacher{}
    }

    创建静态内部类的时候,只要直接使用"外部类.内部类()"的方式,就可以,比如new School.Teacher();

    非静态内部类

    public class School {
        private String name;
        class Teacher{}
    }

    创建非静态内部类的时候,必须要先创建一个外部类的实例,然后通过外部类的实例,再来创建内部类的实例,new School().Teacher()

    通常来说,我们一般都会为了方便,会选择使用静态内部类。

    匿名内部类

    接口只有方法,没有方法实现

    public interface ISayHello {
        String sayhello(String name);
    }

    接口实现类在另一个类的内部,甚至在一个方法里面。匿名内部类一定式继承某一个类或者实现接口,必须去实现抽象类的方法或者接口的方法。

    匿名内部类的使用场景,通常来说,就是在一个内部类,只要创建一次,使用一次,以后就不再使用的情况下,就可以。那么,此时,通常不会选择在外部创建一个类,而是选择直接创建一个实现了某个接口、或者继承了某个父类的内部类,而且通常是在方法内部,创建一个匿名内部类。

  • 相关阅读:
    输入输出
    SpringCloud组件之HystrixDashbord
    SpringCloud组件之zuul的使用
    SpringCloud组件之Hystrix组件的使用
    负载均衡算法示例
    JavaScript基础知识总结
    SpringBoot收藏
    java虚拟机详细图解10--JVM类加载机制及类加载过程
    java虚拟机详细图解9--JVM机器指令集
    java虚拟机详细图解8--JVM运行时数据区
  • 原文地址:https://www.cnblogs.com/RzCong/p/11141418.html
Copyright © 2011-2022 走看看