java匿名内部类的初解
java原生态中的匿名内部类
1.匿名内部类的定义
使用匿名内部类的两种的方法
- 建立父类,重写父类的方法
- 实现接口的方法
2.普通类的实现
1. 普通类实现
实现普通类需要先声明对一个类的对象,再调用对象的方法
建立一个example类
public void student() {
System.out.println("学生在学习");
}
声明类,并实现对应的方法,
public static void main(String[] args) {
example example = new example();
example.student();
}
对应的输出

2.继承父类,重写父类的方法
继承上述的example类,建立example1类,重写父类的方法
public class example1 extends example {
public void student() {
System.out.println("学生在运动");
}
}
在主类中实现其方法
public static void main(String[] args) {
example example = new example1();
example.student();
}
对应的输出

3.普通类实现对应类的缺点
从以上两个例子,我们会发现,当实现一个类的时候,无法重写对应类中的方法。想要实现重写对应类的方法就必须要继承对应的类,重写对应类大方法,再在主类中调用子类,这样在想要实现某一次的父类方法时,就显得太繁重,因此可以使用匿名内部类的方法去实现一个的方法
3.匿名内部类的实现
1.主类中直接使用类
使用new 对应的类
依旧使用上述的example类做例子,在主类中
public static void main(String[] args) {
new example(){
@Override
public void student() {
super.student();
}
}.student();
}
对应的输出

2.在主类中通过接口实现匿名内部类
建立一个接口text
public interface text {
void setName(String name);
}
建立一个类example2类,在其中引入text类
public class example2 {
private int num1;
private text text;
public void setNum1(int num1) {
this.num1 = num1;
}
public void setContent(text cellback) {
text = cellback;
}
public void getresult(String name) {
if (this.num1 == 1) {
text.setName(name);
}
}
}
在主类中重写接口
public static void main(String[] args) {
example2 example2 = new example2();
example2.setContent(new text() {
@Override
public void setName(String name) {
System.out.println(name);
}
});
example2.setNum1(1);
example2.getresult("ts");
}
对应的输出

对应的实现过程为:在主类中设置对应num为1,触发example2中的getresult()方法,对应的name为“ts”,而主类中调用了setcontent()方法,使对应的子类中的接口对象的方法重写,对应的接口对象的setname()方法实现输出对应的name值。调用getresult()方法,触发接口的方法,输出name的值。
4.对应的优点
通过实现匿名内部类,可以实现重写接口的方法,在对应的子类中设置对应的触发条件,实现接口的方法。
实现对类的方法的重写,相较于继承类,对类的方法重写,使用匿名内部列更方便
java匿名内部类的初解的更多相关文章
- #随笔之java匿名内部类
随笔之java匿名内部类 从今天起开始每日一篇技术博客,当然这只是我当天所学的一些随笔,里面或多或少会有理解不当的地方,希望大家多多指教,一起进步! 在讲匿名内部类之前,先讲讲内部类的一些概念. 1. ...
- 从一开始,说出事java匿名内部类
java内部类.匿名类原本以为它们的使用已经很滑, 成绩, 就在昨天晚上12指向时钟发生重大事故.事故的严重程度再说吧,那是因为我没有睡一晚睡眠. 那以下先用一段模拟代码来描写叙述下我出现的问题的: ...
- (转)java匿名内部类详解
原文:http://android.blog.51cto.com/268543/384844/ 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态static的 ...
- 【Java学习笔记之二十六】深入理解Java匿名内部类
在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...
- 【50】java 匿名内部类剖析
匿名内部类介绍: 匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 匿名内部类的声明 ...
- JAVA匿名内部类(Anonymous Classes)
1.前言 匿名内部类在我们JAVA程序员的日常工作中经常要用到,但是很多时候也只是照本宣科地用,虽然也在用,但往往忽略了以下几点:为什么能这么用?匿名内部类的语法是怎样的?有哪些限制?因此,最近,我在 ...
- Java匿名内部类访问外部
匿名内部类访问外部局部变量必须是final修饰的,Java 1.8 会默认为其加上final 例子如下: public void send(String topicName, T obj) { Str ...
- 为什么Java匿名内部类访问的外部局部变量或参数需要被final修饰
大部分时候,类被定义成一个独立的程序单元.在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类,包含内部类的类也被称为外部类. class Outer { priv ...
- Java 匿名内部类 & 内部类
一.JAVA中内部类和匿名内部类的区别 内部类:内部类可以是static的或者非static的,static内部类只能包含静态方法和静态类变量,只能访问外部类的静态元素,内部类可以实例化,多次使用. ...
- java匿名内部类使用场景列举
示例一: package com; interface Operation { double operateTwoIntNum(int a, int b); } p ...
随机推荐
- flutter widget---->Spacer
如果你想灵活控制Flex容器(Row, Column)中子组件中的间隔,可以考虑使用Spacer.下面以Row为例子,来为它的子组件添加间距. use Spacer import 'package:f ...
- $\mathcal{Friends\,\,Of\,--Mathic}$
- Host key verification failed的问题解决 (亲测有效)
一.描述 scp拷贝远程内容时失败,出现以下问题: 翻译: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ...
- [Linux]CentOS查看RPM包依赖问题
[经典应用案例] 查看此文前,可先查看 此博文中:在安装软件过程中,如何解决的依赖组件问题? [数据库/Linux]CentOS7安装MySQL Percona版(RPM方式) : 2-1 依赖组件问 ...
- 使用 Transformers 进行图分类
在之前的 博文 中,我们探讨了图机器学习的一些理论知识.这一篇我们将探索如何使用 Transformers 库进行图分类.(你也可以从 此处 下载演示 notebook,跟着一起做!) 目前,Tran ...
- Java的final修饰符
final 实例域 可以将实例域定义为 final.对于 final 域来说,构建对象时必须初始化 final 实例域,构造对象之后就不允许改变 final 实例域的值了.也就是说,必须确保在每一个构 ...
- C# 获取指定窗口的上层窗口
如何获取当前窗口层级上方的所有窗口信息 User32有函数GetWindow function (winuser.h) - Win32 apps | Microsoft Docs,可以根据已知窗口句柄 ...
- C# ConfigureWait
ConfigureAwait 参数为bool类型.true:尝试将延续任务封送回原始上下文 我们一般使用的是false,用于避免强制在原始上下文或调度程序中进行回调. 原理: 以await DoSom ...
- [OpenCV-Python] 15 图像阈值
文章目录 OpenCV-Python:IV OpenCV中的图像处理 15 图像阈值 15.1 简单阈值 15.2 自适应阈值 15.3 Otsu' 's 二值化 15.4 Otsu' 's 二值化是 ...
- Pwn系列之Protostar靶场 Stack1题解
(gdb) disasse main Dump of assembler code for function main: 0x08048464 <main+0>: push ebp 0x0 ...