Java 在方法和作用域内的内部类
通常,如果所读写 的代码包含了内部类,那么它们都是"平凡的"内部类,简单并且容易理解,然而,内部类的语法覆盖了大量其它的更加难以理解的计数,例如可以在一个方法里或者在任意的作用域里定义内部类.这么做有两个理由
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();
}
} ///:~
Java 在方法和作用域内的内部类的更多相关文章
- Java编程思想读书笔记 第十章 内部类
非静态内部类作用: 最基本的作用:名字隐藏和组织代码 用例:内部类不访问外部类的元素时可以直接new.(bad style!) 用例:通过外部类的非静态方法返回内部类的引用,这样隐含了内部类对象和其对 ...
- 牛客网Java刷题知识点之什么是内部类、为什么要使用内部类、内部类如何使用外部类的属性和方法、成员内部类、局部内部类、静态内部类、匿名内部类
不多说,直接上干货! 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二). 内部类 ...
- Java在方法作用域内创建的内部类
在方法作用域内创建的内部类,用来实现一个接口 /** * Created by xfyou on 2016/11/3. * Java内部类演示 */ public class Parcel3 { pu ...
- 深入理解为什么Java中方法内定义的内部类可以访问方法中的局部变量
好文转载:http://blog.csdn.net/zhangjg_blog/article/details/19996629 开篇 在我的上一篇博客 深入理解Java中为什么内部类可以访问外部类的成 ...
- “全栈2019”Java第一百零一章:局部内部类覆盖作用域内成员详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java学习笔记(七):内部类、静态类和泛型
内部类 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类.下面就先来了解一下这四种 ...
- Java程序设计8——抽象类、接口与内部类
1 抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体.但在某些情况下,某个父类并不需要实现,因为它只需要当做一个模板,而具体的实现,可以由 ...
- 《Java编程思想》笔记 第十章 内部类
1.创建内部类对象 创建内部类对象(相当于new内部类对象) 外围类对象.new 内部类( ). 创建内部类对象一种方法是 外围类有一个方法返回内部类对象. 没有外围类对象就不能创建内部类对象,因为内 ...
- Java 学习笔记(8)——匿名对象与内部类
一般在编写代码时可能会遇到这样的场景--在某些时候,我需要定义并某个类,但是只会使用这一次,或者是某个类对象只会使用一次,为它们专门取名可能会显的很麻烦.为了应对这种情况,Java中允许使用匿名对象和 ...
随机推荐
- SpringBoot 7.SpringBoot 结合 Thymeleaf
一.引入 Thymeleaf 依赖 <!-- Spring boot - thymeleaf --> <dependency> <groupId>org.sprin ...
- maven的pom.xml举例
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- Codeforces ECR50 div2题解
A:签到 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...
- Enum 枚举值 (一) 获取描述信息
封装了方法: public static class EnumOperate { public class BaseDescriptionAttribute : DescriptionAttribut ...
- P2622 关灯问题II
题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时 ...
- How to 对拍?
对拍从数学的统计学角度来说是一个好的方法,至少能在你竞赛中帮你拿回一些分--yzr大牛pas的对拍一开始还没写过,突然想学一下对拍.那么就学吧.dp水题(搜索):https://www.luogu.o ...
- STM32配置GPIO前须先打开其时钟,否则配置失败
@2018-5-9 17:11:38 STM32配置GPIO前须先打开其时钟,否则配置失败
- 前端学习 -- Css -- 默认样式
浏览器为了在页面中没有样式时,也可以有一个比较好的显示效果, 所以为很多的元素都设置了一些默认的margin和padding,而它的这些默认样式,正常情况下我们是不需要使用的. 所以我们往往在编写样式 ...
- 前端学习 -- Css -- 文本样式
text-transform可以用来设置文本的大小写 可选值: none 默认值,该怎么显示就怎么显示,不做任何处理 capitalize 单词的首字母大写,通过空格来识别单词 uppercase 所 ...
- Mask RCNN 原理
转自:https://blog.csdn.net/ghw15221836342/article/details/80084861 https://blog.csdn.net/ghw1522183634 ...