定义:

可以将一个类的定义放在另一个类的内部 这就是内部类。--摘自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内部类细节一的更多相关文章

  1. java内部类细节

    1 package face_09; 2 /* 3 * 为什么内部类能直接访问外部类中的成员呢? 4 * 那是因为内部类持有了外部类的引用. 外部类名.this 5 * 6 */ 7 class Ou ...

  2. Java内部类初探

    Java内部类初探 之前对内部类的概念不太清晰,在此对内部类与外部类之间的关系以及它们之间的调用方式进行一个总结. Java内部类一般可以分为以下三种: 成员内部类 静态内部类 匿名内部类 一.成员内 ...

  3. Java内部类final语义实现

    本文描述在java内部类中,经常会引用外部类的变量信息.但是这些变量信息是如何传递给内部类的,在表面上并没有相应的线索.本文从字节码层描述在内部类中是如何实现这些语义的. 本地临时变量 基本类型 fi ...

  4. java 内部类 *** 最爱那水货

    注: 转载于http://blog.csdn.net/jiangxinyu/article/details/8177326 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类.内部类又 ...

  5. java内部类的作用分析

    提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ...

  6. 9)Java内部类(Inner Class)

      内部类:不可以有静态数据,静态方法或者又一个静态内部类      内部类的优点:隐藏类的细节,内部类可以声明为私有.内部类可以访问外部类的对象(包括private) 静态内部类:可以有静态数据,静 ...

  7. Java内部类的使用小结

    转载:http://android.blog.51cto.com/268543/384844/ Java内部类的使用小结 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可 ...

  8. (转载)Java内部类的使用小结

    原文摘自:http://android.blog.51cto.com/268543/384844/   内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态stati ...

  9. java内部类深入详解 内部类的分类 特点 定义方式 使用

    本文关键词: java内部类 内部类的分类 特点  定义方式 使用   外部类调用内部类 多层嵌套内部类  内部类访问外部类属性  接口中的内部类  内部类的继承  内部类的覆盖  局部内部类 成员内 ...

随机推荐

  1. 排序--MergeSort 归并排序?

    MergeSort 's implementation MergetSort 的中心思想就是分治思想,通过解决每一个小问题来解决大问题 假设你有2个已经排好序的数组 数组[ 4 ][ 8 ] 和 数组 ...

  2. moviepy音视频剪辑:mask clip遮罩剪辑、遮片、蒙版的作用以及其包含的构成内容

    ☞ ░ 前往老猿Python博文目录 ░ 在阅读moviepy的类ImageClip的构造方法代码时,对于其中涉及遮罩的处理没有理解,到处查找遮罩的资料没有查到,最后到moviepy的官网上尝试了一下 ...

  3. 第十二章、Designer中的menu菜单、toolBar工具栏和Action动作

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 Qt Designer中的部件栏并没有菜单.toolBar以及Action相关的部件,仅在 ...

  4. 《30天自制操作系统》软盘 -> VMware虚拟机

    书名叫做30天自制操作系统,按照学校课设答辩的时间来看,估计得把书名改成<一周自制操作系统>,太卷了哈哈哈 我们可以使用qemu来模拟物理机 make run第二天制作的操作系统 可以看到 ...

  5. C#声明一个100大小的数组 随机生成1-100之间不重复的数

    面试题:C#声明一个100大小的数组 随机生成1-100之间不重复的数下面是C#的实现方式,编译测试通过 public static void InsertRandomArray() { int[] ...

  6. 百度前端技术学院-基础-day20-21

    第二十到第二十一天:让你和页面对话 task1 控制元素的显示及隐藏 实现以下功能: 当用户选择了 School 的单选框时,显示 School 的下拉选项,隐藏 Company 的下拉选项 当用户选 ...

  7. golang omitempty 总结

    golang omitempty 总结 在使用Golang的时候,不免会使用Json和结构体的相互转换,这时候常用的就是 json.Marshal和json.Unmarshal两个函数. 这时候在定义 ...

  8. 题解-[ZJOI2005]沼泽鳄鱼

    题解-[ZJOI2005]沼泽鳄鱼 前置知识: 邻接矩阵 矩阵乘法 矩阵快速幂 [ZJOI2005]沼泽鳄鱼 给一个有 \(N\) 个点,\(M\) 条双向边的图 \(G\),其中有 \(NFish\ ...

  9. java.lang.UnsupportedOperationException: Unable to create instance of org.fisco.bcos.web3j.abi.datatypes.generated.Int256

    Contract Address : 0x967f92adc229b77dda64b42af21ea1ff1b0702eb Unable to create instance of org.fisco ...

  10. 本地安装yum源脚本

    rpm -qa|grep yum   //检查是否安装了yum. 如果没有安装就执行下面的文件 创建一个以xxx.sh结尾的文件 #!/bin/bash #创建两个文件用于挂载文件 mkdir /mn ...