`
lc52520
  • 浏览: 361418 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java接口嵌套【Z】

    博客分类:
  • java
阅读更多

在Java语言中,接口可以嵌套在类或其它接口中。由于Java中interface内是不可以嵌套class的,所以接口的嵌套就共有两种方式:class嵌套interface、interface嵌套interface。

1. class嵌套interface
这时接口可以是public,private和package的。重点在private上,被定义为私有的接口只能在接口所在的类被实现。可以被实现为 public的类也可以被实现为private的类。当被实现为public时,只能在被自身所在的类内部使用。只能够实现接口中的方法,在外部不能像正 常类那样上传为接口类型。

2. interface嵌套interface
由于接口的元素必须是public的,所以被嵌套的接口自动就是public的,而不能定义成private的。在实现这种嵌套时,不必实现被嵌套的接口。

程序示例(摘抄改编自《Thinking in Java》):

class  A  {
    
private   interface  D  {
        
void  f();
    }

    
private   class  DImp  implements  D  {
        
public   void  f()  {}
    }

    
public   class  DImp2  implements  D  {
        
public   void  f()  {}
    }

    
public  D getD()  return   new  DImp2(); }
    
private  D dRef;
    
public   void  receiveD(D d)  {
        dRef 
=  d;
        dRef.f();
    }

}


public   class  NestingInterfaces  {
    
public   static   void  main(String[] args)  {
        A a 
=   new  A();
        
// The type A.D is not visible
        
// ! A.D ad = a.getD();
        
// Cannot convert from A.D to A.DImp2
        
// ! A.DImp2 di2 = a.getD();
        
// The type A.D is not visible
        
// ! a.getD().f();        
        A a2  =   new  A();
        a2.receiveD(a.getD());
    }

}


其中语句A.D ad = a.getD()和a.getD().f()的编译错误是因为D是A的私有接口,不能在外部被访问。语句A.DImp2 di2 = a.getD()的错误是因为getD方法的返回类型为D,不能自动向下转型为DImp2类型。

分享到:
评论

相关推荐

    Java毕业设计-JAVA文件压缩与解压缩实践(源代码+论文).rar

    3. 文件解压缩:支持解压到指定目录,自动识别和处理压缩包内嵌套的子目录结构。 4. 用户界面友好:提供图形化操作界面,简化用户操作流程。 5. 错误处理完善:对可能出现的异常情况进行捕获和处理,确保程序稳定...

    java8集合源码-how-to-prepare-for-1Z0-808-certification:如何准备1Z0-808认证

    您将学习(或强化)语言的基础知识,如变量、数据类型、数组、循环、类、方法、异常以及一些不那么基础的主题,如隐式缩小、显式转换、自动装箱、嵌套类、多态和继承、抽象类和接口,以及一些处理集合、字符串和日历...

    JavaSE-11-Developer_1Z0-819:JavaSE-11-Developer_1Z0-819

    Java SE 11开发人员考试编号:1Z0-819使用Java数据类型使用原语和包装器类,包括运算符,括号,类型提升和强制转换使用String和StringBuilder类处理文本使用局部变量类型推断,包括作为lambda参数控制程序流程创建和...

    整理后java开发全套达内学习笔记(含练习)

    nested [java] 嵌套的 ['nestid] '如:内部类(nested classes) Object [java] 对象 ['ɒbdʒekt] Overload [java] 方法的重载(不同参数列表的同名方法) [,әuvә'lәud] Override [java] 方法的覆盖(覆盖父类的...

    达内 coreJava 习题答案

    //循环嵌套,打印九九乘法表 public class NineNine{ public static void main(String[]args){ System.out.println(); for (int j=1;j;j++){ for(int k=1;k;k++) { //老师的做法,判断语句里的 k,省去下列的if...

    java经典面试2010集锦100题(不看你后悔)

    D) Java语言中的多态的含义可以表达为:对外一个接口,内部多种实现。Java语言支持两种多态:运行时多态和编译时多态。 题目8:a 程序如下: public class Demo extends Base { private int count; public Demo()...

    基于mongodb+nodejs+express + vue+elemenet全栈开发带权限的管理系统源码+使用说明.zip

    跳转到index.vue 后components里面再创建leftMenu.vue 和HeadNav.vue 具体看leftMenu以里面的嵌套路由 这两个文件夹引入到views的 Index.vue里面 使用import .. from ..引入切注册组件 HeadNav.vue :取出token校验...

    若干源程序资料12.rar

    2012-06-11 21:06 78,719 C++USB接口的鼠标驱动源程序.rar 2012-06-11 21:07 50,067 C++VC编写的退火算法.rar 2012-06-11 21:06 67,891 C++一示所有点阵字库内容的工具源代码.rar 2012-06-11 21:11 60,547 C++工会...

Global site tag (gtag.js) - Google Analytics