`

Java 中Inner Class的用法(1)

阅读更多
Inner Class得你可以在一个类中把逻辑意义相同的部分放在一起,便于管理。起初学习Inner Class会有些疑惑,下面通过两个示例来说明Inner Class的用法。

1. Outer Class 的成员函数可以像访问其他类一样来访问Inner Class(来自thinking in java),除此之外,必须用OutClass.InnerClass的形式访问Inner Class(例如main函数)。
   public class Parcel {
class Destination{
private String label;
public Destination(String whereTo){
this.label = whereTo;
}
String readLabel(){
return label;
}
}

public Destination to(String s){
return new Destination(s);
}

public void ship(String dest){
Destination d = to(dest);
System.out.println(d.readLabel());
}

public static void main(String[] args){
Parcel p = new Parcel();
p.ship("Beijing");
Parcel q = new Parcel();
Parcel.Destination d = q.to("ShangHai");
System.out.println(d.readLabel());
}
}

2. Inner Class保存一个指向Outer Class的指针,因此可以访问Outer Class的任何成员。下面的例子同时是一个迭代器模式的例子。

interface Iterator {
public Object next();
public boolean hasNext();
}

public interface Aggregrate {
public Iterator iterator();
}

public class Sequence implements Aggregrate{

private Object[] items;
private int index = 0;

public Sequence(int capacity){
items = new Object[capacity];
}

public void add(Object o){
if(index < items.length){
items[index++] = o;
}
}

private class SequenceIterator implements Iterator{

private int currentIndex = 0;
public boolean hasNext() {
return currentIndex < index;
}

public Object next() {
return items[currentIndex++];
}
}
public Iterator iterator(){
return new SequenceIterator();
}

public static void main(String[] args){
Sequence s = new Sequence(10);
for(int i = 0; i <9; i++){
s.add(Integer.toString(i) + " ");
}
Iterator iter = s.iterator();
while(iter.hasNext()){
String item = (String)iter.next();
System.out.print(item);
}
}

}

分享到:
评论

相关推荐

    2022常见JAVA面试题一.docx

    在 JAVA 面试中,常见的问题包括 final, finally, finalize 的区分、Anonymous Inner Class 的使用、Static Nested Class 和 Inner Class 的不同、& 和 && 的区分、HashMap 和 Hashtable 的区分、Collection 和 ...

    Java开发技术大全(500个源代码).

    DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors....

    java中内部类的分类及用法

    在java语言中,有一种类叫做内部类(inner class),也称为嵌入类(nested class),它是定义在其他类的内部。

    JAVA笔试题集锦(1-30)基础部分

    1、作用域public,private,protected,以及不写时的区别 答:区别如下: 作用域 当前类 同一package 子孙类 其他package public √ √ √ √ protected √ √ √ × ...答:java中的保留字,现在没有在java中使用

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    如何使用方法的返回值? 166 7.4.4 使用return结束方法 166 7.5 方法重载(overload):给汽车加速添个限制 168 7.5.1 什么是方法的签名 168 7.5.2 什么是重载?为什么要重载? 168 7.5.3 给汽车加个重载的方法...

    java日常词汇学习

     Access modifier 访问控制修饰符:访问控制修饰符用来修饰Java中类、以及类的方法和变量的访问控制属性。  Anonymous class 匿名类:当你需要创建和使用一个类,而又不需要给出它的名字或者再次使用的使用,就...

    JAVA面试题最全集

    将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能重载 finally?再异常处理时...

    Java面试宝典2017.zip

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    java经典面试题汇总

    答:java中的保留字,现在没有在java中使用 11、数组有没有length()这个方法? String有没有length()这个方法 答:数组没有length()这个方法,有length的属性。String有有length()这个方法 12、Overload和Override的...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    如何使用方法的返回值? 166 7.4.4 使用return结束方法 166 7.5 方法重载(overload):给汽车加速添个限制 168 7.5.1 什么是方法的签名 168 7.5.2 什么是重载?为什么要重载? 168 7.5.3 给汽车加个重载的方法...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

     本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行引擎等;第5-20章深入描述了java技术的内部细节,包括垃圾收集、java安全模型、java的连接模型和动态扩展机制、class文件、运算及...

    java面试宝典

    144、当我重编译我的JSP使用的一个类后,为什么JVM继续使用我的老CLASS? 36 145、与之间的差别? 36 146、JSP的缺点? 36 148、如何实现JSP的国际化? 36 150、如何在JSP中包括绝对路径文件? 使用URLConnection...

    java内部类的使用

    1)在一个类中定义另外一个类,这个类就叫做内部类(inner class) 。内部类的定义和普通类的定义没什么区别,它可以直接访问和引用它的外部类的所有变量和方法(包括private),就像外部类中的其他非static成员的...

    java笔试题

    1、面向对象的特征有哪些方面? 2、访问修饰符public,private,protected,以及不写(默认)时的区别...24、静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同? 25、Java 中会存在内存泄漏吗,请简单描述。

    java 面试题 总结

    子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。...

    java 面试常问的问题 如何回答

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    Java面试宝典

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    Java面试宝典2011版

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 2、Java有没有goto? 3、说说&和&&的区别。 4、在JAVA中如何跳出当前的多重嵌套循环? 5、switch语句能否作用在byte上,能否作用在long上...

    Java问题宝典2012版

    1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 8 2、Java有没有goto? 8 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte上,能否作用在...

    深入Java虚拟机

    第1章 Java体系结构介绍 1.1 为什么使用Java 1.2 网络带来的挑战和机遇 1.3 体系结构 1.3.1 Java虚拟机 1.3.2 类装载器的体系结构 1.3.3 Java class文件 1.3.4 Java API 1.3.5 Java程序设计...

Global site tag (gtag.js) - Google Analytics