java 内部类 菜鸟编程,java中的匿名内部类
匿名内部类也就是没有名字的内部类
正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写
但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口
实例1:不使用匿名内部类来实现抽象方法
abstract class Person {
public abstract void eat();
}
class Child extends Person {
public void eat() {
System.out.println("eat something");
}
}
public class Demo {
public static void main(String[] args) {
Person p = new Child();
p.eat();
}
}
运行结果:eat something
可以看到,我们用Child继承了Person类,然后实现了Child的一个实例,将其向上转型为Person类的引用
但是,如果此处的Child类只使用一次,那么将其编写为独立的一个类岂不是很麻烦?
这个时候就引入了匿名内部类
实例2:匿名内部类的基本实现
abstract class Person {
public abstract void eat();
}
public class Demo {
public static void main(String[] args) {
Person p = new Person() {
public void eat() {
System.out.println("eat something");
}
};
p.eat();
}
}
运行结果:eat something
可以看到,我们直接将抽象类Person中的方法在大括号中实现了
这样便可以省略一个类的书写
并且,匿名内部类还能用于接口上
实例3:在接口上使用匿名内部类
interface Person {
public void eat();
}
public class Demo {
public static void main(String[] args) {
Person p = new Person() {
public void eat() {
System.out.println("eat something");
}
};
p.eat();
}
}
运行结果:eat something
由上面的例子可以看出,只要一个类是抽象的或是一个接口,那么其子类中的方法都可以使用匿名内部类来实现
最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口
实例4:Thread类的匿名内部类实现
public class Demo {
public static void main(String[] args) {
Thread t = new Thread() {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.print(i + " ");
}
}
};
t.start();
}
}
运行结果:1 2 3 4 5
实例5:Runnable接口的匿名内部类实现
public class Demo {
public static void main(String[] args) {
Runnable r = new Runnable() {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.print(i + " ");
}
}
};
Thread t = new Thread(r);
t.start();
}
}
运行结果:1 2 3 4 5
java 内部类 菜鸟编程,java中的匿名内部类相关推荐
- Java内部类引用外部类中的局部变量为何必须是final问题解析
Java内部类引用外部类中的局部变量为何必须是final问题解析 今天编写一个多线程程序,发现在方法内定义内部类时,如果内部类调用了方法中的变量,那么该变量必须申明为final类型,百思不得其解,后来 ...
- java 加密解密编程,java 加密解密容易实现
当前位置:我的异常网» 编程 » java 加密解密容易实现 java 加密解密容易实现 www.myexceptions.net 网友分享于:2013-10-27 浏览:3次 java 加密解密 ...
- java程序员编程过程中的基本问题
问题一:注释器不能找到其中一个类 解决方法: 确保你指定的是类名而不是类的文件名. 如果对CLASSPATH环境变量有进行设置,要重新复位. 如果类在包中,要确保它们处在正确的子目录中. 确保你从.c ...
- java内部类内存泄漏,Android中常见的内存泄漏和解决方案
什么是内存泄漏? 简单点说,就是指一个对象不再使用,本应该被回收,但由于某些原因导致对象无法回收,仍然占用着内存,这就是内存泄漏. 为什么会产生内存泄漏,内存泄漏会导致什么问题? 相比C++需要手动去 ...
- java链式编程_Java 中的链式编程
前言 在写项目的时候,有一个实体类有好多个属性,new 出来之后需要不停的使用setXXX( )方法,效率低而且代码可读性差,查询了下发现可以实现实体类的链式编程. public class Use ...
- Java多线程并发编程--Java并发包(JUC)
Java多线程并发–Java并发包(JUC) 前言 前一篇文章中,笔者已经介绍了Java多线程的一些基础知识,但是想要成为一名中高级Java程序员还必须懂得Java并发包(JUC)的知识点,而且JUC ...
- java ee监听器编程,java EE开发之Servlet第四课:监听器(Listener)
1.什么是Listener 监听器就像老板的秘书,那个秘书就是活的监听器,时时监听着老板,当老板发生一些事情的时候,秘书就会有相应的措施.比如老板口渴了,秘书就会去端茶:比如老板要提提神,秘书就会泡一 ...
- java数值计算算法编程,Java数值计算算法编程
第1章 Java与数值计算. 1.1 数值计算中存在的问题 1.2 用Java实现数值计算算法的要点 1.3 实数类设计与实现 第2章 复数运算 2.1 复数类设计 2.2 复数乘法 2.3 复数除法 ...
- java io 并发编程,JAVA进阶系列 - 并发编程 - 第1篇:进程线程并发并行
学习目标进程 线程 并发 并行 内容 一.进程与线程 "专业"点的说法就是:进程是资源分配的最小单位,线程是CPU调度的最小单位. 大哥,我错了,别打脸! 进程 线程就是用来加载指 ...
最新文章
- Java集合:HashMap线程不安全?有哪些表现?
- [转]关于有偿提供拼图响应式后台的通知
- 通俗地讲清楚fit_transform()和transform()的区别
- PHP观察者通知机制,观察者模式-通知详解
- Python个人项目--豆瓣图书个性化推荐
- 【js】【前台输入效验】【validate插件的使用】 前端
- 《剑指offer》面试题22——栈的压入、弹出序列(C++)
- vue开发中v-for在Eslint的规则检查下出现:Elements in iteration expect to have 'v-bind:key' directives...
- 反恐精英online单机版有各种武器
- 量子纠缠1——量子比特、Bell态、EPR佯谬
- java根据ip地址获取详细地域信息
- 斜挎包长度到哪里合适_一般斜挎包长多少厘米_身高170斜挎包带长
- 超好看的导航页面(静态页面)
- PowerQuery的参数表格用法
- JS实现抖音小姐姐表白源码
- win10:Python3.7安装PyQt4
- vue-pdf使用+分页预览(踩坑 + 使用本地字体库)
- react脚手架创建命令教程
- 徐家福对计算机科学发展的影响或作用,徐家福先生的两句话
- 2021-03-22linux内核编译和安装过程
热门文章
- 微机计算机原理姚向华课后答案,微型计算机操作系统
- cpython cython_python – 优化Cython中的字符串
- ubantu 添加防火墙策略_Ubuntu 14.04 配置iptables防火墙
- 给与用户建立dblink的权限_网络安全 之 NTFS安全权限
- exception日志 php_PHP 错误与异常的日志记录
- python实现五大基本算法_算法基础:五大排序算法Python实战教程
- am335x uart5配置
- Navicat怎么看oracle作业,[数据库] Navicat for Oracle基本用法图文介绍
- c++邮递员投递经过特定点_厉害了斑马鱼,动物实验体天团C位
- qr分解求线性方程组_梯度下降求解线性方程组算例设计