通常,如果所读写 的代码包含了内部类,那么它们都是"平凡的"内部类,简单并且容易理解,然而,内部类的语法覆盖了大量其它的更加难以理解的计数,例如可以在一个方法里或者在任意的作用域里定义内部类.这么做有两个理由

1)如前所述,你实现了某类型的接口,于是可以创建并返回对其的引用

2)你要创建一个复杂的问题,想创建一个类来辅助你的解决方案,但是又不希望这个类是公共可用的.

在后面的例子中前面的代码将被修改,以用来实现:

1)一个定义在方法中的类

2)一个定义在作用域内的类,此作用域在方法的内部

3)一个实现了接口的匿名类

4)一个匿名类,它扩展了有非默认构造器的类

5)一个匿名类,它执行字段初始化

6)一个匿名类,它通过实例初始化实现构造(匿名类不可以能有过构造器)

//: innerclasses/Destination.java
package object;
public interface Destination {String readLabel();
} ///:~
//: innerclasses/Parcel5.java
// Nesting a class within a method.
package object;
public class Parcel5 {public Destination destination(String s) {class PDestination implements Destination {//在destination方法之外不可使用类,可以通过Destination使用private String label;                   //PDestination类的public方法
private PDestination(String whereTo) { label = whereTo; } public String readLabel() { return label; } } return new PDestination(s); } class PDestination //可以定义和PDestination重名的类,但最好不这样做  { } public static void main(String[] args) { Parcel5 p = new Parcel5(); Destination d = p.destination("Tasmania"); } } ///:~

//: innerclasses/Parcel6.java
// Nesting a class within a scope.
package object;
public class Parcel6 {private void internalTracking(boolean b) {if(b) {class TrackingSlip { //在if域之外类TrackingSlip不可用,可以通过internalTracking方法调用,TrackingSlip类的方法private String id;TrackingSlip(String s) {id = s;}String getSlip() { return id; }}TrackingSlip ts = new TrackingSlip("slip");String s = ts.getSlip();}// Can't use it here! Out of scope://! TrackingSlip ts = new TrackingSlip("x");
  }    public void track() { internalTracking(true); }public static void main(String[] args) {Parcel6 p = new Parcel6();p.track();}
} ///:~

转载于:https://www.cnblogs.com/jiangfeilong/p/10223232.html

Java 在方法和作用域内的内部类相关推荐

  1. 9.Java面向对象-方法参数类型及返回值类型、权限修饰符、内部类、匿名内部类

    9.Java面向对象-方法参数类型及返回值类型.权限修饰符.内部类.匿名内部类 一.类名作为形式参数 A:案例演示: 类名作为形式参数当你以后看到一个方法的形参要一个 类 类型,你就传递一个该类的对象 ...

  2. Java基础复习-4-抽象类、内部类、接口

    目录 抽象类 一.概述 二.代码实例 **实例解析** 内部类 内部类分为:成员内部类,局部内部类以及匿名内部类 不同种类类的修饰符 局部内部类的final 匿名内部类(重要) 匿名对象是什么呢?请看 ...

  3. javascript调用java的方法

    这篇文章主要讲述如何在JavaScript脚本语言中调用Java类和接口,对大家的学习和工作有一定的参考借鉴价值,有需要的朋友们下面来一起看看吧. 前言 本文中所有的代码使用 JavaScript 编 ...

  4. 零基础全方位学习java的方法

    java技术岗是一个就业率非常高的岗位,因此有很多人都想要学习java技术,其中不乏一些零基础同学,零基础小白都不清楚自己该如何学习java,那么下面小编就为大家详细的介绍一下零基础全方位学习java ...

  5. Java静态内部类、匿名内部类、成员式内部类和局部内部类

    内部类可以是静态(static)的,可以使用 public.protected 和 private 访问控制符,而外部类只能使用 public,或者默认. 成员式内部类 在外部类内部直接定义(不在方法 ...

  6. java中变量的作用域

    java中变量的作用域 变量一定会被定义在某一对大括号中,该大括号所包含的代码区便是这个变量的作用域.变量分为四个级块:类级 ,对象实例级 ,方法级 ,块级 类级:所谓的全局变量,需要使用static ...

  7. 入Java_初入Java的方法

    Java的方法类似于其他语言如C中的函数,比如我们第一个Java程序  输出Hello,world!中用到一个方法System.out.printfln():这里的printfln()就是一个方法,S ...

  8. Java微服务学习 第九天 接口 内部类

    2.接口 当抽象类中所有方法都是抽象方法的时候,那么这个类是一个特殊的抽象类,叫接口 接口是java中最重要的概念,接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成. 格式: i ...

  9. Java 学习笔记(8)——匿名对象与内部类

    一般在编写代码时可能会遇到这样的场景--在某些时候,我需要定义并某个类,但是只会使用这一次,或者是某个类对象只会使用一次,为它们专门取名可能会显的很麻烦.为了应对这种情况,Java中允许使用匿名对象和 ...

  10. Java中方法的学习

    目录 概述 第一章:Java中的方法是什么意思 (1)Java中方法的定义 ①方法的修饰符 ②方法的返回值类型 ③方法名 ④方法的参数列表 ⑤方法体 第二章:方法的重载和重写 (1)方法的重载 (2) ...

最新文章

  1. UILabel显示带颜色边的文字
  2. 比尔盖茨2016好书推荐
  3. docker部署Redmine项目管理平台
  4. linux cpp vscode远程调试 的配置
  5. 接口对前后端和测试的意义
  6. 利用MFC向导生成单文档应用程序框架
  7. Problems with Ribbon/Feign/Zuul retry
  8. 《工业设计史》第九章:职业工业设计师的出现
  9. 优科豪马冬季SUV轮胎G072的性能特点全解
  10. 如何给Layout文件夹分类
  11. 对数数学知识回忆(log)
  12. 开源OceanBase如何与Prometheus与Grafana监控结合
  13. 巴菲特财富人生精华版
  14. Eth 02 - MII接口概述及代码解析
  15. C++ bitset的使用
  16. Fairplay之 generating FairPlay content key request on iOS after 14.6
  17. Java每日一讲线程池的总结
  18. ArcGIS Runtime Esri新的离线地图数据格式——移动地图包(转载自Esri中国)
  19. QMS-云质-质量管理软件-西门子MES里面有质量模块,为什么还要收购质量软件-IBS?
  20. java实现给微信群中定时推送消息

热门文章

  1. 浮点数例外 (核心已转储)_年仅21岁出场过百重新定义边后卫,克洛普把阿诺德打造成进攻核心...
  2. Json文件转Map(二)之解析节点
  3. 通俗认识理解OpenAI Five
  4. 2018-2019-1 20189204《Linux内核原理与分析》第一周作业
  5. Hive、Spark优化案例
  6. 牛客 小a与星际探索 bfs
  7. 【sping揭秘】18、使用spring访问数据
  8. BZOJ3571 [Hnoi2014]画框 【分治 + KM算法】
  9. eclipse javaWeb项目如何引入jar包
  10. C/C++(变量作用域)