匿名类可直接使用上下文已定义变量

前言

昨天晚上听到潘老师解答邢彦年学长的问题,听了半天也是云里雾里,毕竟身为一个“假的”计算机专业的学生,我什么都不知道,什么匿名类,匿名函数......这些我都没印象了,我只记得那位教面向对象程序设计的老师一节课能讲60多页,六页的知识用两句话就能讲完,如今既然接触到了这个东西就得学明白了。
7DB73F2D-5BD2-401a-A26A-E9E1D687D923.png
IMG_20200229_105217.jpgjava

匿名类

首先来看一下匿名类的定义
  • 匿名类,就是内部类,是没有类名的类,其名称由Java编译器给出,通常是形如:外部类名称+$+匿名类顺序,没有名称也就是其余地方就不能引用,不能实例化,只用一次,固然也就不能有构造器。
  • 匿名类就是利用父类的构造函数和自身类体构形成一个类。
  • 匿名类能够继承父类的方法,也能够重写父类的方法。
  • 匿名类能够访问外部类的成员变量和方法,匿名类的类体不能够声明称static成员变量和static方法。
  • 匿名类因为是一个new的结果,因此其实能够赋值给一个父类对象。所以能够分为两种匿名类,成员匿名类和局部匿名类(做为函数参数)
  • 匿名类的语法:
new  <父类或者接口名>  (<参数列表>) {    成员定义} ;
匿名类实现接口
interface hello
    {  
        String start();  
    }  
public class OK
{  
   public String hello()
    {  
      hello sentence =new hello()  //这个地方就是匿名类  
        { 
            String start()
            { 
               return "hello world";
            }  
        } 
        return sentence;
    }  
}

经过代码看出,实际上hello是一个接口,自己接口是不能直接new的,可是呢在new的时候,hello这个接口后面带了一对花括号,那么这个就表示实际上如今new的是这个接口的实现类。可是发现,这个实现类是没有名字的,因此这个实现类叫匿名类。多线程

匿名类继承父类
class Add
{
    public int add(int a, int b)
    {
        return a + b;
    };
}
class Demo
{
    int c = 6;
    Add add = new Add() //匿名类
    {
        public int add(int a, int b)
        {
            return super.add(2,3) + c;
        }
    };
}

这里的匿名类用到了类外的变量c,上文中的变量能够在匿名类中使用。那么上面的问题也就解决了,上面的类传入了参数klass,那么匿名类就能够直接使用该参数。ide

匿名类的特色
  • 匿名内部类顾名思义就是没有名字的内部类。
  • 由于没有名字,因此匿名内部类只可使用一次。
  • 匿名内部类经常使用来简化代码的编写。
  • 使用内部类有一个前提条件,必须继承父类或实现一个接口。
  • 匿名内部类经常用于多线程。

总结

这篇博客写了很久,一开始一点都看不懂,面对许多专业名词,我真的是一脸懵,是真的一脸懵,后来问了问学长,总算是理解了那么一点,但愿此次的学习能给之后带来许多便利吧。函数

引用

感谢这些文章的做者的分享
java匿名类的定义
匿名类
Java之匿名内部类详解学习

相关文章
相关标签/搜索