内部接口

内部接口

今天 看源码的时候,发现有的类中的接口内部还有嵌套的接口,于是百度了一下,进行了详细的了解。

定义:内部接口,说白了就是一个普通接口的内部还嵌套这接口。

接口中嵌套接口

接下来我们看这个小案例:

//内部接口的使用
public interface IMessage {
    public void send(String msg);

    //java 内部接口
    interface Iconnect{
        public boolean build();
    }

}
public class MessageImpl implements IMessage {
    //由此我们可以看出,内部接口不一定非要实现
    @Override
    public void send(String msg) {
        System.out.println(msg);
    }
}
public class TestDemo {
    public static void main(String[] args) {
        IMessage message = new MessageImpl();
        message.send("今天的天气真好!");
    }
}//能够正常运行,运行结果:今天的天气真好!

嵌套的接口怎样使用

如果我们想要实现我们的内部接口,那么应该怎样操作呢?

接着看:

public class MessageImpl implements IMessage {
    //由此我们可以看出,内部接口不一定非要实现
    @Override
    public void send(String msg) {
        System.out.println(msg);
    }

    //内部接口可以选择性的进行子类的实现
    class ConnectImpl implements Iconnect {
        @Override
        public boolean build() {
            return true;
        }
    }
}
public class TestDemo {
    public static void main(String[] args) {
        IMessage message = new MessageImpl();
        message.send("今天的天气真好!");

        IMessage.Iconnect iconnect=((MessageImpl)message).new ConnectImpl();//注意中间的转换过程。
        System.out.println(iconnect.build());
    }
}

运行结果:

今天的天气真好!
true

接口内部添加接口的实现类

我们还可以在接口内部添加接口的实现类

操作如下:

//内部接口的使用
public interface IMessage {
    public void send(String msg);
    public class MessageImpl implements IMessage{

        @Override
        public void send(String msg) {
            System.out.println(msg);
        }
    }

    public static IMessage getInstance(){
        return new MessageImpl();
    }
}
public class TestDemo {
    public static void main(String[] args) {
        IMessage instance = IMessage.getInstance();
        instance.send("今天的天气真好");

    }
}运行结果:今天的天气真好

接口中定义抽象类:

//内部接口的使用
public interface IMessage {
    public void send(String msg);

    public abstract class AbsConnect{
        public abstract boolean build();
    }

}
public class MessageImpl implements IMessage {
    //由此我们可以看出,内部接口不一定非要实现
    private class ConnectImpl extends AbsConnect{

        @Override
        public boolean build() {
            return true;
        }
    }
    @Override
    public void send(String msg) {
        AbsConnect connect = new ConnectImpl();
        if(connect.build()){
            System.out.println(msg);
        }

    }
}
public class TestDemo {
    public static void main(String[] args) {
        IMessage instance = new MessageImpl();
        instance.send("今天的天气真好");

    }
}运行结果:今天的天气真好

总结:在所有的结构之中,嵌套的程序结构永远都可以随处进行定义。

原文地址:https://www.cnblogs.com/dongyaotou/p/15816808.html