首页 > 其他分享 >匿名内部类和接口类

匿名内部类和接口类

时间:2023-05-23 15:47:43浏览次数:36  
标签:Runnable 内部 void 接口 匿名 new 接口类 public

一些接口“实例化”的情况

众所周知,在java中接口是不可实例化的,但是我们经常会遇到这样一些情况:

Runnable runnable = new Runnable() {
    @Override
    public void run() {

    }
};
File dir = new File("d://aa.txt");
File[] files= dir.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        return  false;
    }
});

上面的Runnable和FileFilter都是接口,那怎么他们可以被new呢?难到接口也可以实例化吗?

答案当然是不能,接口就是接口,是不能被实例化的。

上面的情况事实上并不是被所谓实例化了,而是一种实现了该接口的匿名内部类

什么是匿名内部类?

  • 定义:匿名内部类是定义在类的局部位置,没有名称的内部类。
  • 一些特征:
    • 本质上:一个继承了父类的子类或者实现了某个接口的实现类
    • 本质上是一个类但同时也是一个对象
    • 没有类名
    • 匿名内部类无需写构造器
    • 可以访问外部类的属性(包括私有的)
    • 是一个局部变量,不能添加访问修饰符
  • 作用:当一个内部内只需要创建一次对象,以后再也不会用到。匿名内部类方便我们编写程序
//匿名内部类实例
public class  Student  {
    public void in(){
        //没有名字
        new App().a();
    }
}
class App{
    public void a(){}
}

为什么出现这种情况

在了解了匿名内部类的定义之后,这种情况的答案就显而易见了,

Runnable runnable = new Runnable() {
    @Override
    public void run() {

    }
};

在这种情况中,右边其实是一个实现了Runnable接口的内部类并不是该类的实例化对象,左边则是一个Runnable接口的变量空间

和下面情况类似:

public class aa implements  Runnable {

    @Override
    public void run() {
        
    }

    public static void main(String[] args) {
        Runnable runnable = new aa();
        aa.run();
    }
}

标签:Runnable,内部,void,接口,匿名,new,接口类,public
From: https://www.cnblogs.com/rainaftersummert/p/17425396.html

相关文章

  • 42 | 总线:计算机内部的高速公路
    专栏讲到现在,如果我再问你,计算机五大组成部分是什么,应该没有人不知道了吧?我们这一节要讲的内容,依然要围绕这五大部分,控制器、运算器、存储器、输入设备和输出设备。CPU所代表的控制器和运算器,要和存储器,也就是我们的主内存,以及输入和输出设备进行通信。那问题来了,CPU从......
  • rocky Elasticsearch 8.7.1集群 x-spack 安全验证 及 集群内部TLS加密传输 (ca)
    目录简介环境准备安装配置hostname解析安装systemd脚本ca证书配置给所有ES配置相同的用户密码启动查看 简介常规部署Elasticsearch集群时,不管是集群之间的数据传输,或者是Client访问Elasticsearch集群时均不需要相关验证,可通过对外提供的http接口,......
  • Python 2-04 匿名函数
    Python匿名函数一、匿名函数lambdaλlambda[args]:expression即lambda[参数列表]:表达式lambda_add=lambdax,y:x+ydefnormal_add(x,y):returnx+yassertlambda_add(2,3)==normal_add(2,3)注:assertexpression[,arguments]即:assert表达式......
  • Java面向对象中“匿名对象”的使用
    1.0匿名对象的基本知识匿名对象顾名思义,匿名对象指的就是没有名字的对象,在使用中理解为实例化一个类对象,但是并不把它赋给一个对应的类变量,而是直接使用。在理解匿名对象前,我们先创建一个类便于后面的使用。匿名对象具有以下特征:语法上:只创建对象,但不用变量来接收,例如:假设现......
  • 美联储内部分歧不断加大!妥协方案:6月“跳过”,7月再加!
       在周五举行的托马斯·劳巴赫研究会议上,美联储主席鲍威尔、前主席伯南克一同出席,并对当前的热点政策问题发表了看法。货币政策,自然是备受关注的议题。   凭借研究“银行和金融危机”荣获2022年诺贝尔经济学奖的伯南克表示,银行业危机依然遵循着“存款下降、挤兑、传染”的经......
  • 内部类
    内部类内部类就是在一个类的内部再定义一个类。比如:A类中定义了一个B类,那么B类相对于A类来说就称为内部类,而A类就是B类的外部类了。成员内部类。packageoop.demo01.demo10;publicclassOuter{privateintid=10;publicvoidout(){System.out.prin......
  • 本机tomcat部署程序,局域网内部可以访问吗
    同一个局域网内可以如果另一台电脑与Tomcat所在的电脑,在同个局域网内,那么可以通过IP+端口号来访问。不在同个局域网内,需要做内网穿透如果不在同个局域网内,那可以先用花生壳,cpolar等将网站映射到公网上,会生成相应的公网URL地址,另一台电脑访问这个公网地址,就可以访问到内网网站。......
  • 流程控制和一些字符串内部读取关键词或格式
    1.流程控制1.while+continue立即调出本次循环,同属一个代码块后面的代码都不会进行,直接回到while   //不仅可以用在while中,for循环中也可以例:1#打印出0到5的数字,除了32x=03whilex<=5:4ifx==3:5x+=16continue7els......
  • 《C++ 匿名对象》
    匿名对象通常具有如下特点:没有变量引用的对象。匿名对象的目的用于及时使用(一次使用)。匿名对象作为参数传递给函数。用于减少内存消耗。 生命周期:匿名对象的生命周期,只存在于当前代码的这一行,遇到;结束。 定义:Classname({parameters}); 例子:#include<iostre......
  • Linux多进程09-匿名管道实现ps aux
    /*实现psaux|grepxxx父子进程间通信子进程:psaux,子进程结束后将数据发送给父进程父进程:获取到数据,guolvpipe()execlp()子进程将标准输出stdout_fileno重定向到管道的写端dup2()*/#include<stdio.h>#include<stdlib.......