您的位置:首页 > 编程语言 > Java开发

Java中的内部类

2016-01-09 19:05 337 查看
一、概念

在类的内部创建的类就是内部类。

package com.ray.ch08;

public class Test {

class Destination {
}

class Content {
}

}


上面的Destination和Content就是内部类。

二、为什么需要内部类?

(1)隐藏代码

package com.ray.ch08;

import com.ray.ch08.Test.Destination;

public class Test {

class Destination {
}

private class Content {
}

}

class Ship {
// Content content = new Test().new Content();//error
}


我们可以使用private来隐藏某些实现类。

当我们需要调用某个类的内部类时,必须先new 外部类,就像下面的Destination类一样。

package com.ray.ch08;

import com.ray.ch08.Test.Destination;

public class Test {

class Destination {
}

private class Content {
}

}

class Ship {
Destination destination = new Test().new Destination();
// Content content = new Test().new Content();//error
}


(2)通过与外部类的通信

package com.ray.ch08;

public class Test {
private int id = 0;

class Destination {
private void print() {
System.out.println(id);// 这里的id是int com.ray.ch08.Test.id
}
}

private class Content {
}

}


package com.ray.ch08;

public class Test {
private int id = 0;

public String name = "aaa";

private void say() {
System.out.println("Class Test Method say");
}

public void run() {
}

class Destination {
private void print() {
System.out.println(id);// 这里的id是int com.ray.ch08.Test.id
}

private void say() {
say();// Class Test Method say
System.out.println("Class Destination Method say");
}

}

private class Content {
private String a = name;

private void run() {
run();// Class Test Method run
}
}

}


上面的例子充分展现了内部类访问外部类的各种权限,从私有域到私有方法再到公有域和方法。

三、内部类和迭代器模式

内部类与迭代器模式之间的关系,其实就是迭代器的实现。

package com.ray.ch08;

public class Sequence {
private Object[] items;

private int next = 0;

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

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

private class SequenceSelector implements Selector {
private int i = 0;

@Override
public boolean end() {
return items.length == i;
}

@Override
public void next() {
if (items.length > i) {
i++;
}
}

@Override
public Object current() {
return items[i];
}
}

public Selector getSelector() {
return new SequenceSelector();
}

public static void main(String[] args) {
Sequence sequence = new Sequence(10);
for (int i = 0; i < 10; i++) {
sequence.add(i);
}
Selector selector = sequence.getSelector();
while (!selector.end()) {
System.out.println(selector.current());
selector.next();
}
}

}

interface Selector {
boolean end();

void next();

Object current();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java