李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
在方法和作用域内的内部类
Leefs
2019-11-05 AM
4095℃
3条
# 在方法和作用域内的内部类 ### 前言 通常,如果所读写 的代码包含了内部类,那么它们都是"平凡的"内部类,简单并且容易理解,然而,内部类的语法覆盖了大量其它的更加难以理解的计数,例如可以在一个方法里或者在任意的作用域里定义内部类.这么做有两个理由 : (1) 如前所述,你实现了某类型的接口,于是可以创建并返回对其的引用 (2) 你要创建一个复杂的问题,想创建一个类来辅助你的解决方案,但是又不希望这个类是公共可用的. ### 内部类用途 在后面的例子将修改前面内部类与向上转型的代码,用来实现: (1) 一个定义在方法中的类 (2) 一个定义在作用域内的类,此作用域在方法的内部 (3) 一个实现了接口的匿名类 (4) 一个匿名类,它扩展了有非默认构造器的类 (5) 一个匿名类,它执行字段初始化 (6) 一个匿名类,它通过实例初始化实现构造(匿名类不可以能有过构造器) > 代码示例1 ```java //客户端程序员可用的接口 interface Destination { String readLabel(); } public class Parcel5 { public Destination destination(String s) { //在destination方法之外不可使用该类,可以通过Destination使用 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) { Parcel5 p = new Parcel5(); Destination d = p.destination("Tasmania"); } } ``` > 代码分析 1. 1.`PDestination`类是在`destination()`方法中定义的,在destination方法之外不可使用该类,可以通过Destination使用 2. 2.通过private修饰符将`PDestination`构造器进行私有化,使其除其自身类,任何类都不能对其进行访问。 3. 3.访问过程 + (1)在主函数中创建`Parcel5`对象 + (2)调用对象中的`destination()`方法,并且传入参数`Tasmania` + (3)此时执行destination()方法中的return语句,return语句通过向上转型,返回的是 Destination的引用,它是PDestination()的父类 + (4)此时执行`PDestination`类的构造方法,对其进行初始化 > 代码示例2 ```java public class Parcel6 { private void internalTracking(boolean b) { if(b) { //在if域之外类TrackingSlip不可用,可以通过internalTracking方法调用,TrackingSlip类的方法 class 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(); } } ``` > 代码分析 1. 1.在类Parcel6中有共有方法`track()`和私有方法`internalTracking()` 2. 2.从而,通过公有方法完成对私有方法的对外使用 3. 3.在if域之外类`TrackingSlip`不可用 4. 4.调用过程: + (1)主函数创建`Parcel6`对象 + (2)调用其中的`track()`方法 + (3)在`track()`方法中调用本类中的私有方法`internalTracking()`并参数true + (4)执行`internalTracking()`方法,创建`TrackingSlip`内部类对象 + (5)执行`TrackingSlip`类的初始化操作 + (6)调用`TrackingSlip`类中的公共方法`getSlip()`
标签:
Java
,
Java编程思想
,
JavaSE
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/131.html
上一篇
Thymeleaf表达式讲解(一)
下一篇
Thymeleaf表达式讲解(二)
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Golang基础
锁
Scala
Spark RDD
Tomcat
数学
SpringCloud
Hive
前端
MyBatisX
人工智能
JVM
Azkaban
SQL练习题
正则表达式
Golang
Redis
FastDFS
Java阻塞队列
Spring
Git
JavaSE
Spark SQL
栈
Flume
稀疏数组
算法
Spark
Docker
GET和POST
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭