• 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);
    }

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

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

  • 相关阅读:
    jQuery(3)——DOM操作
    jQuery(2)——选择器
    jQuery(1)——了解jQuery
    JavaScript(10)——Ajax以及跨域处理
    JavaScript(9)——call与apply
    JavaScript(8)——JSON
    JavaScript(7)——事件2.0
    JavaScript(6)——事件1.0
    JavaScript(5)——DOM
    spring mvc+spring+mybatis搭建javaWeb项目时遇到的一些问题
  • 原文地址:https://www.cnblogs.com/RzCong/p/11141418.html
Copyright © 2020-2023  润新知