匿名内部类的使用总结
匿名内部类也就是没有名字的内部类
正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写
但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口
public class innerclassDemo {public static void main(String[] args) {/*** 1.匿名内部类,用在父类是个抽象类的情况* (1)Person 是一个抽象类 ,直接在实例中定义一个方法say();*/Person person = new Person() {@Overridepublic void say() {System.out.println("hello china!!");}};person.say();/*** (2)子类继承Person类,实现say()方法。*/Person person2 = new Men();person2.say();/*** 2.匿名内部类,用在父类是个接口的情况* (1)InterfacePersonDemo是个接口,直接在实例中定义一个方法eat();*/InterfacePersonDemo interfacePerson = new InterfacePersonDemo() {@Overridepublic void eat() {System.out.println("I like eat bread!!");}};interfacePerson.eat();/*** (2) Woman类实现了InterfacePersonDemo接口,实现内部eat方法。*/InterfacePersonDemo interfacePerson2 = new Woman();interfacePerson2.eat();/*** 3.匿名内部类,用在父类是个可以被继承的情况,父类不能使final的*/Animal animal = new Animal(){@Overridepublic void drink() {System.out.println("drink a water!");}};animal.drink();/**** 正常使用*/Animal animal2 = new Dog();animal2.drink();}}//可以被继承的父类
class Animal{public void drink() {}
}//继承父类
class Dog extends Animal{@Overridepublic void drink() {System.out.println("i like water!");}}//抽象父类
abstract class Person{public abstract void say();}
//继承抽象父类类
class Men extends Person{@Overridepublic void say() {System.out.println("I am a men!!");}}
//接口
interface InterfacePersonDemo{public abstract void eat();}
//实现接口
class Woman implements InterfacePersonDemo{@Overridepublic void eat() {System.out.println("i eat a bread!");}}
由上面的例子可以看出,只要一个类是抽象的或是一个接口,或者可以被继承且可重写里面方法的父类,那么其子类中的方法都可以使用匿名内部类来实现方法或者创造方法。
最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口
可以参考下面博客:http://www.cnblogs.com/nerxious/archive/2013/01/25/2876489.html
转载于:https://www.cnblogs.com/IT-Monkey/p/3526905.html
匿名内部类的使用总结相关推荐
- java 匿名内部类
1 匿名内部类概念: 匿名内部类就是一个没有显式的名字的内部类 2 匿名内部类创建: 匿名类是不能有名称的类,所以没办法引用它们.必须在创建时,作为new语句的一部分来声明它们. 格式: *在使用匿名 ...
- java 匿名对象有引用_java 匿名内部类对象持有外部类对象的引用
转载自:https://www.jianshu.com/p/9335c15c43cf /** * @author hgl * @data 2019年1月10日 * @description 接口 */ ...
- java val$name_匿名内部类 this.val$的问题
一天偶尔在网上找到一个jar包,反编译后出现了如下的代码: public void defineAnonymousInnerClass(String name) { new Thread(name) ...
- 线程、线程匿名内部类、解决线程不安全的方式
线程 线程:正在运行的程序,是程序的执行路径:多线性 进程:是应用程序的载体,程序运行在虚拟机中.一个应用软件对应一个进程. 一个进程包含多个线程,一个线程对应一个进程. 好处:提高软件的运行效率 多 ...
- 有名内部类 匿名内部类
内部类,从名字上就可以看出,是定义在外部类里的类,可以更加详细地说明某个事物的特征,举个例子,就像一个人(把他定义为一个类[外部类]),这个人有大脑.肝脏.心脏等器官,这些器官都有自己特有的属性,但又 ...
- java培训教程:什么是匿名内部类?怎样创建匿名内部类?
本期java教程要为大家分享的是关于java中的匿名内部类,相信很多同学在学java技术的时候有了解过,下面我们就来详细的看一下. java培训教程:什么是匿名内部类?怎样创建匿名内部类?匿名内部类是 ...
- 为什么匿名内部类参数必须为final类型
转自:http://ldzyz007.iteye.com/blog/844380 基础语法:如果定义一个匿名内部类,并且希望它使用一个在其外部定的对象,那么编译器会要求其参数引用是final的. 1. ...
- java学习之匿名内部类与包装类
匿名内部类: 所谓匿名内部类,顾名思义指的就是定义在类内部的匿名类,现有的spring框架开发以及java图形界面都经常用到匿名内部类. 下面来看一个代码: interface A{public vo ...
- JAVA匿名内部类的一点讨论
关于JAVA内部类:一个内部类的定义是定义在另一个类内部的类. 存在它的原因是: 1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据.即内部类实例对包含它的哪个类的实例来说,是特权的. 2. ...
- Java类与匿名内部类
大家好,这篇文章我们主要向大家介绍Java基础中的Object类.匿名内部类.构造方法的继承知识,一起来学习下吧! 一.Object类 Object类是所有类的父类,所有类都继承Object类. Ob ...
最新文章
- min max rand repmat 函数
- dataframe 如何选中某列的一行_如何用 Python 在笔记本上分析 100GB 数据?
- source insight 常用设置及快捷键
- (四)RabbitMQ消息队列-服务详细配置与日常监控管理
- CF1100F Ivan and Burgers
- C语言分支语句与循环语句较为全面的总结,快来看呀!!
- HDU 3996 Gold Mine【最大闭合权图】
- 微信小程序map组件 markers 展示当前位置修改标记点图标
- android 表情包下载,表情包制作大师下载
- FTP服务器是什么意思?FTP服务器怎么搭建?
- 集线器、交换机和路由器的区别
- 如何才能修炼成一名不可替代的程序员?
- 疫情家庭常见消毒剂:次氯酸、次氯酸钠、酒精、对间氯二甲苯酚 、西吡氯铵、 二氧化氯;消炎药与抗生素
- python快速实现简易俄罗斯方块小游戏
- 升级到Android12后Termux不能访问Android/data目录该怎么办
- C语言:裴波那契数列(数组)
- graythresh
- 学python还是计算机三级,考试无忧全国计算机等级考试python(python二级证书有用吗)...
- JavaScript 中 var 、let、const区别
- 盗图+php,PHP小偷程序的设计与实现方法详解
热门文章
- linux wifi修改频率,Linux Custom CRDA WiFi regulatory.bin和40MHz BW 5GHz频...
- 场外和场内的区别_3分钟看懂场内基金和场外基金的区别!
- 双十一购物节,Nacos 1.4.0 + Go SDK 1.0.1发布
- 三体智能革命_《三体》之人类的科技文明发展历史其实很诡异
- Mysql多表查询(案例3)
- picf509c语言程序,樊媛媛c语言程序设计09编译预处理.pptx
- qt on android 桌面鼠标事件,關於Qt on Android,程序安裝到手機,界面只占到一小部分。...
- go hive skynet_MMORPG游戏服务器技术选型参考-Go语言中文社区
- c++根据二叉树的层次遍历建立二叉树_LeetCode | 102.二叉树的层次遍历
- python三个点画正弦线_python3绘图示例5(基于matplotlib:正弦图等)