java 匿名类 实现接口_细谈 Java 匿名内部类 【分别 使用 接口 和 抽象类实现】...
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 匿名内部类 【分别 使用 接口 和 抽象类实现】...相关推荐
- java接口与类相同不同_浅谈java的接口和C++虚类的相同和不同之处
C++虚类相当于java中的抽象类,与接口的不同之处是: 1.一个子类只能继承一个抽象类(虚类),但能实现多个接口 2.一个抽象类可以有构造方法,接口没有构造方法 3.一个抽象类中的方法不一定是抽象方 ...
- java方法区对象类型_浅谈Java内存区域与对象创建过程
一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则 ...
- php和java的区别菜鸟教程_浅谈Java和PHP的主要区别
当谈到PHP与Java的差异性问题时,更多的是回答初学者的一些疑问.对于刚接触IT的同学来说,他们需要做好对未来职业的选择.所以是选择PHP还是选择Java更有利于自身的技术特点和发展前景.所以在解决 ...
- java的向下转型_浅谈Java向下转型的意义
一开始学习 Java 时不重视向下转型.一直搞不清楚向下转型的意义和用途,不清楚其实就是不会,那开发的过程肯定也想不到用向下转型. 其实向上转型和向下转型都是很重要的,可能我们平时见向上转型多一点,向 ...
- java中单例的应用_浅谈Java中单例模式的几种应用
目录 浅谈Java中单例模式的几种应用 第一种:懒汉式 第二种:饿汉式 第三种:双重检索式 第四种:注册登记式 第五种:内部类形式 浅谈Java中单例模式的几种应用 日常开发中,为了提高我们系统中对象 ...
- java字符串常量存哪里_浅谈JAVA中字符串常量的储存位置
在讲述这些之前我们需要一些预备知识: Java的内存结构我们可以通过两个方面去看待它. 从该角度看的话Java内存结构包含以下部分:该部分内容可以结合:JVM简介(更加详细深入的介绍) 1.栈区:由编 ...
- java四种内部类区别_浅谈Java中的四种内部类
如果你看过一些JDK和框架源码的话,就经常会发现一般在类的定义中,都会再定义一些其他的类,这些类也同样会被编译成字节码文件,这样的类就被叫做 内部类 ,按照一般的分法,大致可以分为以下四类: 成员内部 ...
- java工具类怎么写_常用的Java工具类——十六种
常用的Java工具类--十六种 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选 ...
- java中的类的继承_再谈Java中类的继承
上篇博客谈到了Java中类的继承,但是那些远远不能满足我们在实际操作中的需要,那么怎么才能让子类的功能更强大,并且具有父类的属性呢? 一: 父类 1 public classA {2 3 final ...
最新文章
- 一个运维老将的自我修养
- iOS:Masonry练习详解
- 设计模式---4(抽象工厂模式的概念,产品组和产品等级的概念,抽象工厂模式的实现)
- 北上广深的程序员,房子在向你们招手了!
- Golang指针,for循环
- Jessica Kerr:高绩效团队简史
- android多个拖动控件,Android使用WindowManager制作一个可拖动的控件
- 求ReportMachine的OCX教程
- 读书印记 - 《刘强东自述:我的经营模式》
- 如何看懂公司的财务报表(2)
- C# 使用ZXing.net生成一维码(带数字与不带数字)、二维码(带logo与不带logo)
- 月份缩写python_用法语月份缩写解析日期
- 07 Java 工程师面试技巧篇
- [NOIP2011]铺地毯 D1 T1
- 三元运算 微信小程序_微信小程序 三元运算符 条件语句if和循环语句for(三目运算+hidden)...
- qt tab弹出特效_Nuke Studio 12(影视特效合成软件)中文版分享
- 网络编程+go+java,Go语言中的TCP/IP网络编程
- 什么是3C认证?3C认证的介绍
- AI智能音箱五大功能中应用的数字功放芯片
- 音视频技术开发周刊 | 247