首页 > 编程语言 >Java 匿名内部类

Java 匿名内部类

时间:2023-03-02 15:12:44浏览次数:43  
标签:部类 Java 内部 访问 匿名 实例 new

什么是匿名内部类

匿名类是一个表达式,在定义的最后用分号";"结束

匿名内部类可以使你的代码更加简洁,你可以在定义一个类的同时对其进行实例化。它与局部类很相似,不同的是它没有类名,如果某个局部类你只需要用一次,那么你就可以使用匿名内部类

匿名类是不能有名字的类,它们不能被引用,只能在创建时用New语句来声明它们。匿名类的声明是在编译时进行的,实例化在运行时进行,这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。
匿名类的目的是在某个地方需要特殊的实现,因此在该处编写其实现,并获取它的实例,调用它的方法。不要在匿名内部类编写其他的方法,是不可见的 例子:
Handler mHandler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
        }
    };
new Thread(){
@Override
public void run() {
super.run();
}
};

tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

}
});

语法格式

new <类或接口> <类的主体>

为什么在Java中需要内部类

  1. 每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。内部类使得多继承的解决方案变得完整,
  2. 方便将存在一定逻辑关系的类组织在一起,又可以对外界隐藏。
  3. 方便编写事件驱动程序
  4. 方便编写线程代码

内部类的作用

实现了更好的封装,我们知道,普通类(非内部类)的访问修饰符不能为private或protected,而内部类可以。当我们将内部类声明为private时,只有外部类可以访问内部类,很好地隐藏了内部类。

内部类可以继承(extends)或实现(implements)其他的类或接口,而不受外部类的影响。

内部类可以直接访问外部类的字段和方法,即使是用private修饰的,相反的,外部类不能直接访问内部类的成员。

匿名内部类作用域内的局部变量的访问及成员变量的访问

匿名内部类与局部类对作用域内的变量拥有相同的的访问权限。

(1)、匿名内部类可以访问外部内的所有成员;

(2)、匿名内部类不能访问外部类未加final修饰的变量(注意:JDK1.8即使没有用final修饰也可以访问);

(3)、属性屏蔽,与内嵌类相同,匿名内部类定义的类型(如变量)会屏蔽其作用域范围内的其他同名类型(变量):

标签:部类,Java,内部,访问,匿名,实例,new
From: https://www.cnblogs.com/wanglongjiang/p/17171801.html

相关文章

  • why is the setInterval task executed slower than the setTimeout task in the brow
    whyisthesetIntervaltaskexecutedslowerthanthesetTimeouttaskinthebrowserjavascriptenvironment?为什么在浏览器javascript环境下setInterval任务......
  • Spring Java配置
    从Spring4开始可以通过Java配置方式取代XML配置.这也是SpringBoot配置的方式.java配置方式是通过@Configuration和@Bean这两个注解实现.1.1@Configuration和@Bean ......
  • Java Web程序设计——MyEclipse的安装、配置
    JavaWeb程序设计——MyEclipse的安装、配置具体安装、配置过程请参考下面的博客MyEclipse安装、配置、测试——博客园原博客中所需文件均存放于百度网盘中,如下......
  • java文件生成字节码到加载到jvm的运行流程分析
    Java程序是怎么运行的?一 java代码到.class文件概括来说,写好的Java源代码文件经过Java编译器编译成字节码文件后,通过类加载器加载到内存中,才能被实例化,然后到Java......
  • java - for 循环15
    packagecom.demo.test;publicclasscirculate{publicstaticvoidmain(String[]args){System.out.println();f();}publicstat......
  • java Switch14
      packagecom.demo.test;importjava.util.Scanner;publicclasschange{publicstaticvoidmain(String[]args){s();}publicst......
  • Java8中Stream详细用法大全
    Java8中Stream详细用法大全一、概述Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操......
  • java版GDAL使用环境
    win10x64,GDALx64,idea社区版1、path设置  2、proj_lib设置  3、导入为库 ......
  • java- if 13
    packagecom.demo.test;importjava.util.Scanner;publicclassiff{publicstaticvoidmain(String[]args){//cipher();school(99);}pu......
  • Java实验-Swing 文件处理
    实验要求:点击read按钮,则读入指定txt文档中的内容,显示在第一个文本域(左边文本域中)。2.点击sort按钮,则将文本域中特点的字符提取出来,放到右边的文本域中。3.点击save按......