java编程思想 -- 内部类

内部类的使用

内部类拥有外围类所以成员的访问权

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;
        }
    }

    /*
     * 内部类拥有外围类所有的访问权
     */
    private class SequenceSelector implements Selector{
        private int i = 0;

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

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

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

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

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

    }
}

运行结果

0
1
2
3
4
5
6
7
8
9

在内部类中,通过’外部类类名.this’获取外部类对象的应用

package 内部类.点this的使用;

public class DotThis {
    private String s = "";

    public DotThis(String s) {
        super();
        this.s = s;
    }

    void f(){
        System.out.println(s);
    }

    public Inner inner(){
        /*
         * 产生的内部类对象自动与外部类对象发生关联。
         */
        return new Inner();
    }

    public class Inner{
        public DotThis outer(){
            /*
             * 返回与内部类对象关联的外部类的对象
             */
            return DotThis.this;
        }
    }

    public static void main(String[] args) {
        DotThis dt = new DotThis("chuqin");
        Inner inner = dt.inner();
        inner.outer().f();
    }
}


结果

chuqin

通过‘外部类对象.new’创建内部类对象


public class DotNew {
    public class Inner{
        public void helloworld(){
            System.out.println("hello world");
        }
    }

    /*
     * 想要直接创建内部类的对象,不能直接 new DotNew.Inner()
     * 而必须是通过外部类的对象来创建内部类的对象,与此同时,内部类对象与外部类对象发生了关联
     * 静态的内部类则可以直接创建对象,不需要与外部类对象发生关联
     */
    public static void main(String[] args) {
        DotNew dn = new DotNew();
        DotNew.Inner dni = dn.new Inner();
        dni.helloworld();
    }
}

结果

hello world

内部类向上转型隐藏实现的细节

package 内部类.内部类与向上转型;

public class Car {
    private class MoveImpl implements Move{

        @Override
        public void moveForward() {
            System.out.println("move formard");
        }

        @Override
        public void moveBack() {
            System.out.println("move back");    
        }

    }

    protected class TrumpetImpl implements Trumpet{

        @Override
        public void call() {
            System.out.println("call");
        }

    }

    /*
     * 返回一个private类的对象,隐藏实现的细节
     */
    public Move move(){
        return new MoveImpl();
    }

    /*
     * 返回一个protected类的对象,隐藏实现的细节
     */
    public Trumpet trumpet(){
        return new TrumpetImpl();
    }
}

interface Move{
    void moveForward();
    void moveBack();
}

/**
 * 喇叭
 */
interface Trumpet{
    void call();
}

匿名内部类

静态内部类

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值