Java-InnerClass-03

Java内部类:名字隐藏+代码组织
当生成一个内部类的对象时,此对象与制造它的外围对象(enclosing object)之间就有了一种联系:它能访问其外围对象的所有成员,而不需要任何条件.此外,内部类还拥有其外围类的所有元素的访问权.
为什么内部类会自动拥有对其外围类所有成员的访问权:当外围类的对象创建了一个内部类对象时(内部类的对象只能在与其外围类的对象相关联的情况下才能被创建.构建内部类对象时,需要一个指向其外围类对象的引用,如果编译器访问不到这个引用就会报错),此内部类对象必定会保存一个指向外围类对象的引用.然后,在你访问此外围类的成员时,就是用那个"隐藏的"引用来选择外围类的成员.
interface  Selector {
    
boolean isEnd();
    Object current();
    
void next();
}

/*Sequence类只产生了一个Object数组,Selector接口:检查序列是否到末尾;查看当前对象;移到序列中下一个对象(这是一个完整的操作,所以设置为独立模块).*/
class  Sequence {
    
private int next = 0;
    
private Object obj[];
    Sequence(
int size){
        obj 
= new Object[size];
    }

    
public void addToSequence(Object element){
        
if(next<obj.length)
            obj[next
++= element;
            
/*因为数组是Object的,所以要把int型的element转换成一个对象,String是一种对象,而Object是所以对象的基类,所以上面代码属于向上转型.*/
    }

    
private class SSelector implements Selector{
        
private int i = 0;
        
public boolean isEnd(){return i == obj.length;}
        
public Object current(){return obj[i];}
        
public void next(){if(i<obj.length)i++;}
        
/*三个方法都引用了外围类中的obj字段*/
    }

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

}

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

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值