1.前言

匿名内部类是什么东西?

没有名字的内部类就是匿名内部类。

什么场景使用?

匿名内部类适合创建那种只需要一次使用的类。

这是个很有用的东西,可想而知,如果不使用匿名内部类,哪些只需要使用一次的类岂不是需要单独做个文件存放?文件多起来,连名字都不好起,

这算是 给 起名字困难人群 巨大的福利啊!!!直接不要名字啦,哈哈哈哈哈

匿名内部类的使用需要接口或抽象类的使用,而使用抽象类又有点像Java多态知识点用法,当然区别还是有的。

2.操作

(1)使用接口实现匿名内部类

创建一个接口

packagecom.example.javabaisc.anonymous;public interfaceInterFood {public voideat();public voidcount();

}

创建一个测试类

packagecom.example.javabaisc.anonymous;importorg.junit.jupiter.api.Test;public classAnoTest {/*** 使用接口实现匿名内部类*/@Testpublic voidt1(){//方法一:实例接口后直接配置内部方法来实现逻辑

InterFood interFood = newInterFood() {

@Overridepublic voideat() {

System.out.println("吃苹果");

}

@Overridepublic voidcount() {

System.out.println("100个");

}

};

interFood.eat();

interFood.count();//=================================

System.out.println("==============================================");//方法二:以接口实现的匿名内部类作为对象参数,直接传入方法内使用

AnoTest anoTest = newAnoTest();

anoTest.ano(newInterFood() {

@Overridepublic voideat() {

System.out.println("这次要吃桃子。");

}

@Overridepublic voidcount() {

System.out.println("500个桃子够吗");

}

});

}public voidano(InterFood interFood){

interFood.eat();

interFood.count();

}

}

View Code

打印结果

【注意:

使用接口实现匿名内部类有个明显的缺点,无法传入参数,只能在内部类里面定义死,

但是可以 引入外部的常量,jdk8以下的需要使用final

packagecom.example.javabaisc.anonymous;importorg.junit.jupiter.api.Test;public classAnoTest {/*** 使用接口实现匿名内部类*/@Testpublic voidt1(){//jdk8以下的需要使用final//final int kk = 666;

int kk = 666;//方法一:实例接口后直接配置内部方法来实现逻辑

InterFood interFood = newInterFood() {

@Overridepublic voideat() {

System.out.println("吃苹果");

}

@Overridepublic voidcount() {

System.out.println("100个");

}

};

interFood.eat();

interFood.count();//=================================

System.out.println("==============================================");//方法二:以接口实现的匿名内部类作为对象参数,直接传入方法内使用

AnoTest anoTest = newAnoTest();

anoTest.ano(newInterFood() {

@Overridepublic voideat() {

System.out.println("这次要吃桃子。"+kk);

}

@Overridepublic voidcount() {

System.out.println("500个桃子够吗");

}

});

}public voidano(InterFood interFood){

interFood.eat();

interFood.count();

}

}

View Code

打印结果

(2)使用抽象类实现匿名内部类

创建一个抽象类

packagecom.example.javabaisc.anonymous;//抽象类

abstract public classAbstractFood {//抽象方法

abstract voidgetCount();//无参构造函数方法

publicAbstractFood() {

}//有参构造函数方法

publicAbstractFood(String name) {this.name =name;

}//变量属性

privateString name;publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}

}

View Code

测试类

packagecom.example.javabaisc.anonymous;importorg.junit.jupiter.api.Test;public classAnoTest {/*** 使用抽象类实现匿名内部类*/@Testpublic voidt2() {//方法一:传入参数

AbstractFood abstractFood = new AbstractFood("苹果") {//初始化块

{

System.out.println("匿名内部类的初始化块...");

}

@OverridevoidgetCount() {

System.out.println("200个");

}

};

System.out.println(abstractFood.getName());

abstractFood.getCount();

System.out.println("==============================================");//

//方法二: 引用外部参数变量

String mname = "樱桃";

AbstractFood abstractFood2= newAbstractFood() {//初始化块

{

System.out.println("匿名内部类的初始化块...");

}

@OverridevoidgetCount() {

System.out.println("50个");

}//即便不是抽象方法,也可以覆写类里面的普通方法

@OverridepublicString getName() {returnmname;

}

};

System.out.println(abstractFood2.getName());

abstractFood2.getCount();

System.out.println("==============================================");//

//方法三:匿名内部类作为参数传入方法中

AnoTest anoTest = newAnoTest();

anoTest.abs(new AbstractFood("火龙果") {//初始化块

{

System.out.println("匿名内部类的初始化块...");

}

@OverridevoidgetCount() {

System.out.println("10个");

}

});

}public voidabs(AbstractFood abstractFood) {

System.out.println(abstractFood.getName());

abstractFood.getCount();

}

}

View Code

打印结果

java 匿名类 实现接口_细谈 Java 匿名内部类 【分别 使用 接口 和 抽象类实现】...相关推荐

  1. java接口与类相同不同_浅谈java的接口和C++虚类的相同和不同之处

    C++虚类相当于java中的抽象类,与接口的不同之处是: 1.一个子类只能继承一个抽象类(虚类),但能实现多个接口 2.一个抽象类可以有构造方法,接口没有构造方法 3.一个抽象类中的方法不一定是抽象方 ...

  2. java方法区对象类型_浅谈Java内存区域与对象创建过程

    一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...

  3. php和java的区别菜鸟教程_浅谈Java和PHP的主要区别

    当谈到PHP与Java的差异性问题时,更多的是回答初学者的一些疑问.对于刚接触IT的同学来说,他们需要做好对未来职业的选择.所以是选择PHP还是选择Java更有利于自身的技术特点和发展前景.所以在解决 ...

  4. java的向下转型_浅谈Java向下转型的意义

    一开始学习 Java 时不重视向下转型.一直搞不清楚向下转型的意义和用途,不清楚其实就是不会,那开发的过程肯定也想不到用向下转型. 其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向 ...

  5. java中单例的应用_浅谈Java中单例模式的几种应用

    目录 浅谈Java中单例模式的几种应用 第一种:懒汉式 第二种:饿汉式 第三种:双重检索式 第四种:注册登记式 第五种:内部类形式 浅谈Java中单例模式的几种应用 日常开发中,为了提高我们系统中对象 ...

  6. java字符串常量存哪里_浅谈JAVA中字符串常量的储存位置

    在讲述这些之前我们需要一些预备知识: Java的内存结构我们可以通过两个方面去看待它. 从该角度看的话Java内存结构包含以下部分:该部分内容可以结合:JVM简介(更加详细深入的介绍) 1.栈区:由编 ...

  7. java四种内部类区别_浅谈Java中的四种内部类

    如果你看过一些JDK和框架源码的话,就经常会发现一般在类的定义中,都会再定义一些其他的类,这些类也同样会被编译成字节码文件,这样的类就被叫做 内部类 ,按照一般的分法,大致可以分为以下四类: 成员内部 ...

  8. java工具类怎么写_常用的Java工具类——十六种

    常用的Java工具类--十六种 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选 ...

  9. java中的类的继承_再谈Java中类的继承

    上篇博客谈到了Java中类的继承,但是那些远远不能满足我们在实际操作中的需要,那么怎么才能让子类的功能更强大,并且具有父类的属性呢? 一: 父类 1 public classA {2 3 final ...

最新文章

  1. 一个运维老将的自我修养
  2. iOS:Masonry练习详解
  3. 设计模式---4(抽象工厂模式的概念,产品组和产品等级的概念,抽象工厂模式的实现)
  4. 北上广深的程序员,房子在向你们招手了!
  5. Golang指针,for循环
  6. Jessica Kerr:高绩效团队简史
  7. android多个拖动控件,Android使用WindowManager制作一个可拖动的控件
  8. 求ReportMachine的OCX教程
  9. 读书印记 - 《刘强东自述:我的经营模式》
  10. 如何看懂公司的财务报表(2)
  11. C# 使用ZXing.net生成一维码(带数字与不带数字)、二维码(带logo与不带logo)
  12. 月份缩写python_用法语月份缩写解析日期
  13. 07 Java 工程师面试技巧篇
  14. [NOIP2011]铺地毯 D1 T1
  15. 三元运算 微信小程序_微信小程序 三元运算符 条件语句if和循环语句for(三目运算+hidden)...
  16. qt tab弹出特效_Nuke Studio 12(影视特效合成软件)中文版分享
  17. 网络编程+go+java,Go语言中的TCP/IP网络编程
  18. 什么是3C认证?3C认证的介绍
  19. AI智能音箱五大功能中应用的数字功放芯片
  20. 音视频技术开发周刊 | 247

热门文章

  1. Delphi的笔记整理(一)
  2. 用Delphi创建服务程序
  3. VS-code中的Postman替代品
  4. bash-shell高级编程-变量的赋值
  5. LGB 的 .feature_importance() 函数
  6. 【软考之路】关于上周参加的软考的几点感想
  7. STM32开发 -- 蓝牙开发详解(1)
  8. JZOJ 5939. 【NOIP2018模拟10.30】阻击计划
  9. BZOJ 3740. 【TJOI2014】电源插排
  10. MySQL编程技巧_PHP与MySQL开发的8个技巧小结