初探JAVA内部类细节一
定义:
可以将一个类的定义放在另一个类的内部 这就是内部类。--摘自java编程思想
一般实现方式:
public class SimpleInnerClass {
class Content {
private int i;
public int getVlaue() {
return i;
}
}
class Description {
private String lable;
Description(String lab) {
this.lable = lab;
}
public String readLable() {
return lable;
}
}
public void ship(String lable) {
Content content=new Content();
Description description=new Description(lable);
System.out.println(description.readLable());
}
public static void main(String[] args) {
Parcle2 parcle2 = new Parcle2();
parcle2.ship("hi");
}
}
上面的事例是最普通不过的内部类表达的例子,通过创建内部类对象的引用访问内部类方法
但一般有更通用的做法,通常是在外围类创建一个方法关联内部类的引用;通过这种方式来建立彼此之间的联系。以代码为例:
public class InnerClass {
class Content {
private int i;
public int getVlaue() {
return i;
}
}
class Description {
private String lable;
Description(String lab) {
this.lable = lab;
}
public String readLable() {
return lable;
}
}
public Content getContentInstance() {
return new Content();
}
public Description getDescriptionIntance(String lable) {
return new Description(lable);
}
public void ship(String lable) {
Content content = getContentInstance();
Description description = getDescriptionIntance(lable);
System.out.println(description.readLable());
System.out.println(description.readLable());
}
public static void main(String[] args) {
InnerClass parcle2 = new InnerClass();
parcle2.ship("hi");
InnerClass.Content c = parcle2.getContentInstance();// 如果想在外部类的非静态方法之外的任意位置访问某个内部类的对象,那么必须通过OutClass.xx
InnerClass.Description d = parcle2.getDescriptionIntance("hello");
}
}
有了联系之后内部类就可以访问外围类的所有元素,无论是private类型也可以。
以下代码即是佐证:
public interface Selector {
boolean end();
Object current();
void next();
}
public class Sequence {
private Object[] items;
private int next = 0;
public Sequence(int size) {
items = new Object[size];
}
public void add(Object object) {
if (next < items.length) {
items[next++] = object;
}
}
class SequenceSelector implements Selector {
private int i = 0;
@Override
public boolean end() {
// TODO Auto-generated method stub
return i == items.length;
}
@Override
public Object current() {
// TODO Auto-generated method stub
return items[i];
}
@Override
public void next() {
if (i < items.length) {
i++;
}
}
}
/**
* 内部类对象只有与外围类对象相关联时才能被创建<p>
* 构建内部类对象时,需要指向一个其外围类对象的引用;如果编译器访问不到这个引用就会报错
* @return
*/
public Selector selector() {
return new SequenceSelector();
}
public static void main(String[] args) {
Sequence sequence = new Sequence(5);
for (int i = 0; i < 5; i++) {
sequence.add(i);
}
// Sequence.SequenceSelector c=sequence.selector();
Selector selector = sequence.selector();
while (!selector.end()) {
System.out.println(selector.current());
selector.next();
}
}
}
在此,比较初始化的内部类细节介绍完毕,下一章笔者在继续介绍更深一层次的内部类细节
p.p1 { margin: 0; font: 12px Menlo }
p.p2 { margin: 0; font: 12px Menlo; color: rgba(147, 26, 104, 1) }
p.p3 { margin: 0; font: 12px Menlo; min-height: 14px }
span.s1 { color: rgba(147, 26, 104, 1) }
span.s2 { color: rgba(0, 0, 0, 1) }
span.s3 { color: rgba(3, 38, 204, 1) }
span.s4 { color: rgba(126, 80, 79, 1) }
span.s5 { text-decoration: underline; color: rgba(126, 80, 79, 1) }
span.s6 { color: rgba(57, 51, 255, 1) }
span.Apple-tab-span { white-space: pre }
初探JAVA内部类细节一的更多相关文章
- java内部类细节
1 package face_09; 2 /* 3 * 为什么内部类能直接访问外部类中的成员呢? 4 * 那是因为内部类持有了外部类的引用. 外部类名.this 5 * 6 */ 7 class Ou ...
- Java内部类初探
Java内部类初探 之前对内部类的概念不太清晰,在此对内部类与外部类之间的关系以及它们之间的调用方式进行一个总结. Java内部类一般可以分为以下三种: 成员内部类 静态内部类 匿名内部类 一.成员内 ...
- Java内部类final语义实现
本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ...
- java 内部类 *** 最爱那水货
注: 转载于http://blog.csdn.net/jiangxinyu/article/details/8177326 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类.内部类又 ...
- java内部类的作用分析
提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ...
- 9)Java内部类(Inner Class)
内部类:不可以有静态数据,静态方法或者又一个静态内部类 内部类的优点:隐藏类的细节,内部类可以声明为私有.内部类可以访问外部类的对象(包括private) 静态内部类:可以有静态数据,静 ...
- Java内部类的使用小结
转载:http://android.blog.51cto.com/268543/384844/ Java内部类的使用小结 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可 ...
- (转载)Java内部类的使用小结
原文摘自:http://android.blog.51cto.com/268543/384844/ 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态stati ...
- java内部类深入详解 内部类的分类 特点 定义方式 使用
本文关键词: java内部类 内部类的分类 特点 定义方式 使用 外部类调用内部类 多层嵌套内部类 内部类访问外部类属性 接口中的内部类 内部类的继承 内部类的覆盖 局部内部类 成员内 ...
随机推荐
- Cys_Control(五) MMenu
一.查看Menu原样式 1.通过Blend查看Menu原有样式 Menu的原有样式结构较为简单,由边框Border及集合控件 ItemsPresenter 组成,原有样式如下 <Style x: ...
- 第9.4节 Python中用readline读取二进制文件方式打开文件
在<第9.3节 Python的文件内容读取:readline>中介绍了使用readline读取文件的处理,readline除了使用文本文件方式打开文件读外,也可以读取二进制方式打开的文件, ...
- FFmpeg在Android Studio中断点调试
一般情况下在Android平台使用FFmpeg为动态库或静态库的形式,只能通过设置FFmpeg日志回调来看一些FFmpeg输出的日志,有时需要debug来查看FFmpeg内部执行过程,本文记录一下在A ...
- 5分钟入门MP4文件格式
写在前面 本文主要内容包括,什么是MP4.MP4文件的基本结构.Box的基本结构.常见且重要的box介绍.普通MP4与fMP4的区别.如何通过代码解析MP4文件 等. 写作背景:最近经常回答团队小伙伴 ...
- "利用python进行数据分析"学习记录01
"利用python进行数据分析"学习记录 --day01 08/02 与书相关的资料在 http://github.com/wesm/pydata-book pandas 的2名字 ...
- HDU3686 Traffic Real Time Query System
P.S.此题无代码,只有口胡,因为作者码炸了. 题目大意 给你一个有 \(n\) 个点, \(m\) 条边的无向图,进行 \(q\) 次询问,每次询问两个点 \(u\) \(v\),输出两个点的之间的 ...
- AcWing 294. 计算重复
暴力 其实这题的暴力就是个模拟.暴力扫一遍 \(conn(s_1, n_1)\),若出现了 \(res\) 个 \(s_2\). 答案就是 \(\lfloor res / n1 \rfloor\). ...
- JApiDocs(自动生成接口文档神器)
JApiDocs教程 前言 作为一名优秀的程序员来说,由于涉及到要与前端进行对接,所以避免不了的就是写接口文档.写完接口文档,一旦代码返回结果,参数等出现变动,接口文档还得随之改动,十分麻烦,违背了我 ...
- 最新快手抖音短视频源码web+APP架设教程+完整数据
最新更新快手抖音短视频源码web+APP架设教程+完整数据完美运行 视频直播源码,好东西,反正有人要就是了. 下载地址:https://pan.baidu.com/wap/init?surl=POU5 ...
- .NET Core +Angular 项目 部署到CentOS
前言: 最近公司需要开发项目能在Linux系统上运行,示例开发项目采用.Net Core + Angular开发:理论上完全支持跨平台. 但是实践才是检验真理的唯一标准:那么还是动手来验证实现下:过程 ...