(转)java匿名内部类详解
1. 成员内部类
- public class Outer {
- public static void main(String[] args) {
- Outer outer = new Outer();
- Outer.Inner inner = outer.new Inner();
- inner.print("Outer.new");
- inner = outer.getInner();
- inner.print("Outer.get");
- }
- // 个人推荐使用getxxx()来获取成员内部类,尤其是该内部类的构造函数无参数时
- public Inner getInner() {
- return new Inner();
- }
- public class Inner {
- public void print(String str) {
- System.out.println(str);
- }
- }
- }
2. 局部内部类
- public class Parcel4 {
- public Destination destination(String s) {
- class PDestination implements Destination {
- private String label;
- private PDestination(String whereTo) {
- label = whereTo;
- }
- public String readLabel() {
- return label;
- }
- }
- return new PDestination(s);
- }
- public static void main(String[] args) {
- Parcel4 p = new Parcel4();
- Destination d = p.destination("Tasmania");
- }
- }
- public class Parcel5 {
- private void internalTracking(boolean b) {
- if (b) {
- class TrackingSlip {
- private String id;
- TrackingSlip(String s) {
- id = s;
- }
- String getSlip() {
- return id;
- }
- }
- TrackingSlip ts = new TrackingSlip("slip");
- String s = ts.getSlip();
- }
- }
- public void track() {
- internalTracking(true);
- }
- public static void main(String[] args) {
- Parcel5 p = new Parcel5();
- p.track();
- }
- }
3. 嵌套内部类
4. 匿名内部类
- ((Button) findViewById(R.id.start)).setOnClickListener(new Button.OnClickListener() {
- @Override
- public void onClick(View v) {
- new Thread() {
- @Override
- public void run() {
- // TODO Auto-generated method stub
- }
- }.start();
- }
- });
- public class Outer {
- public static void main(String[] args) {
- Outer outer = new Outer();
- Inner inner = outer.getInner("Inner", "gz");
- System.out.println(inner.getName());
- }
- public Inner getInner(final String name, String city) {
- return new Inner() {
- private String nameStr = name;
- public String getName() {
- return nameStr;
- }
- };
- }
- }
- //注释后,编译时提示类Inner找不到
- /* interface Inner {
- String getName();
- } */
- public class Outer {
- public static void main(String[] args) {
- Outer outer = new Outer();
- Inner inner = outer.getInner("Inner", "gz");
- System.out.println(inner.getName());
- }
- public Inner getInner(final String name, String city) {
- return new Inner(name, city) {
- private String nameStr = name;
- public String getName() {
- return nameStr;
- }
- };
- }
- }
- abstract class Inner {
- Inner(String name, String city) {
- System.out.println(city);
- }
- abstract String getName();
- }
- public class Outer {
- public static void main(String[] args) {
- Outer outer = new Outer();
- Inner inner = outer.getInner("Inner", "gz");
- System.out.println(inner.getName());
- System.out.println(inner.getProvince());
- }
- public Inner getInner(final String name, final String city) {
- return new Inner() {
- private String nameStr = name;
- private String province;
- // 实例初始化
- {
- if (city.equals("gz")) {
- province = "gd";
- }else {
- province = "";
- }
- }
- public String getName() {
- return nameStr;
- }
- public String getProvince() {
- return province;
- }
- };
- }
- }
- interface Inner {
- String getName();
- String getProvince();
- }
5.内部类的继承
- public class InheritInner extends WithInner.Inner {
- // InheritInner() 是不能通过编译的,一定要加上形参
- InheritInner(WithInner wi) {
- wi.super();
- }
- public static void main(String[] args) {
- WithInner wi = new WithInner();
- InheritInner obj = new InheritInner(wi);
- }
- }
- class WithInner {
- class Inner {
- }
- }
(转)java匿名内部类详解的更多相关文章
- “全栈2019”Java第一百零三章:匿名内部类详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java内部类详解
Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...
- 黑马----JAVA迭代器详解
JAVA迭代器详解 1.Interable.Iterator和ListIterator 1)迭代器生成接口Interable,用于生成一个具体迭代器 public interface Iterable ...
- [转] Java内部类详解
作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...
- 【转】Java内部类详解
一.内部类基础 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类.下面就先来了解一 ...
- Java内部类详解 2
Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...
- 【Java_基础】Java内部类详解
1.四种内部类 java中的四种内部类:成员内部类.静态内部类.局部内部类和匿名内部类.其中匿名内部类用到的最多. 1.1.成员内部类 若一个类定义在另一个类的内部作为实例成员,我们把这个作为实例成员 ...
- C++调用JAVA方法详解
C++调用JAVA方法详解 博客分类: 本文主要参考http://tech.ccidnet.com/art/1081/20050413/237901_1.html 上的文章. C++ ...
- Java虚拟机详解----JVM常见问题总结
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
随机推荐
- git工具使用的简单介绍
百度百科 写道 Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git的读音为/gɪt/. Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大 ...
- 在mysql 5.6的环境下修改生产环境的表结构(在线ddl) ----工具pt-osc
随着需求的变化越来越快,在线修改表结构变得越来越需要. 在mysql5.6以前,mysql的修改表结构操作会锁表,这样就会造成开发人员或者DBA修改表结构必须要等到凌晨流量谷值或者停服修改.这样必定会 ...
- 移动端测试方案--sptt
sptt sptt是移动端UI自动化测试的一种解决方案,全称为special tool of test.sptt提供了一套测试解决方案,并使用命令行完成相关操作,最终可集成在各种后续的流程中. spt ...
- Spring Cloud搭建微服务架构----前言
前言 微服务并不神秘,只是在互联网技术发展过程中的一个产物,整个架构系统随着客户端的多样性,服务越来越多,devops的发展而产生的架构变种. 许多公司,通过采用微处理结构模式解决单体应用的问题,分解 ...
- lua 条件控制
lua 条件控制 if 语句 结构 if (condition) then statements end 示例程序 local a = 10 if (a > 1) then print(&quo ...
- 【算法】字符串匹配之Z算法
求文本与单模式串匹配,通常会使用KMP算法.后来接触到了Z算法,感觉Z算法也相当精妙.在以前的博文中也有过用Z算法来解决字符串匹配的题目. 下面介绍一下Z算法. 先一句话讲清楚Z算法能求什么东西. 输 ...
- JS作用域就这么几句话
JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走遍天下都不怕... 一.“JavaScript中无块级作用域” 在Java或C# ...
- Linux 3.2中回写机制的变革
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://alanwu.blog.51cto.com/3652632/1109952 wri ...
- HTML5和CSS3实现3D转换效果 CSS3的3D效果
上次,我们一起研究了css3的2d模块,这次我们一起来看一下css3的3d模块. 首先,我们来了解一下3d的坐标系,x轴在屏幕上为水平方向,y轴为垂直方向,而z轴为垂直于屏幕的方向. 不理解的话可以参 ...
- [原创]一种基于Python爬虫和Lucene检索的垂直搜索引擎的实现方法介绍
声明:本文首发在博客园晨星落羽,Shulin_Cao和lvmememe首页,转载请注明出处. 前言 2016.5到2017.5,我们三人(lvmememe,Shulin_Cao,晨星落羽)共同完成了一 ...