`
lc52520
  • 浏览: 369109 次
  • 性别: 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知识点: ### 1. 配置Java开发环境 #### 环境变量设置 为了确保能够在计算机上顺利地开发Java程序,需要正确配置环境变量。具体步骤如下: 1. **新建...

    1z0-809 128q.pdf(ocp jdk8)-CSDN下载

    从给定的文件信息中可以看出,这是关于Oracle公司Java 8 SE 8 Programmer II认证考试1Z0-809题库的内容。Java SE 8 Programmer II是Java程序员在具备Java SE 8基础之后的一个进阶认证,题库中的题目旨在测试考生对...

    JAVA经典例子难得一见

    该方法通过嵌套循环实现九九乘法表的输出。 ### 12. 将 java.util.Date 转换为指定格式的字符串 ```java public String dateToStr(java.util.Date date) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM...

    Java 2实用教程,第五版 。课后习题

    - **示例1**:演示了如何打印从'a'到'z'的字符。 - **示例2**:计算数学上著名的阶乘和,使用了for循环和乘法运算。 - **示例3**:使用do-while循环打印特定的数学序列。 - **示例4**:通过嵌套循环判断素数并打印。...

    很重要的java总结

    对象的属性可以包含其他对象,这被称为嵌套对象或组合,这种特性使得对象能够表现更复杂的结构。 面向对象编程的主要优势在于其符合人类理解和解决问题的方式,同时也提供了封装、继承和多态这三个核心原则。封装...

    java判断题

    自Java 8起,接口可以包含默认方法和静态方法,因此实现接口的类不一定需要实现接口中的所有方法。 #### 10. 所有的文件输入/输出流都继承于InputStream类/OutputStream类。(F) **解析**:这是错误的。虽然大多数...

    广度和深度优先遍历算法,递归解压嵌套的zip文件

    首先,需要引入Java的`java.util.zip`包,它提供了对ZIP文件的操作接口,如`ZipInputStream`用于读取ZIP文件,`ZipEntry`表示ZIP文件中的一个条目(可以是文件或目录)。 ```java import java.io.*; import java....

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

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

    大学Java-Java-JAVA试卷12

    表达式"x > y || x > z"的真假取决于x是否大于y或x是否大于z。 10. **do...while循环**:do...while循环至少会执行一次,即使条件为假。"i/=2;"表示i除以2并赋值回i,当i>3时,i会不断减半,直到小于等于3,因此i的...

    java代码优化细节总结1.0版本.7z

    - 尽量减少嵌套循环,提升算法时间复杂度,例如,使用二分查找代替线性搜索。 - 避免在循环体内进行不必要的计算,可以提前计算或存储结果。 4. **异常处理**: - 精确捕获异常,避免使用`catch (Exception e)`...

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

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

    java代码优化总结1.0版本.7z

    使用synchronized关键字时,尽量缩小锁的粒度,考虑使用Lock接口提供的高级同步机制,如ReentrantLock。另外,合理利用并发容器,如ConcurrentHashMap,它们内部设计有优化的并发控制,比简单的同步集合更高效。 除...

    jni操作list集合,来存储对象

    在Java层,我们需要创建一个JNI接口,其中包含要由C/C++实现的方法。例如,可以有一个`addPointToList`方法: ```java public native void addPointToList(List<Point> points, Point newPoint); ``` 2. **JNI...

    一套完整的java面试题

    2. SQL嵌套查询示例: (1) SELECT S.S#, SN FROM S, SC WHERE SC.CN = '税收基础' AND S.S# = SC.S# (2) SELECT S.S#, SN FROM S, SC WHERE S.S# = SC.S# AND SC.C# = 'C2' (3) SELECT S.S#, SN FROM S WHERE S.S...

    面试题 大参考 java

    Java中的嵌套类分为两种类型:静态嵌套类 (`Static Nested Class`) 和非静态嵌套类 (`Non-static Inner Class`)。 - **静态嵌套类**:不需要外部类的实例即可实例化,并且不能访问外部类的非静态成员。 - **非静态...

    《面向对象程序设计JAVA语言程序设计》期末复习试题及部分答案.pdf

    本资源摘要信息涵盖了 JAVA 语言程序设计的多个方面,包括面向对象程序设计的基本概念、Java 语言的基本语法、对象继承、多态性、封装性、抽象类和接口、异常处理、迭代器、线程等。 1. 在 Java 语言中,运算符重载...

    数据结构 java 软件工程笔试

    Java表达式y+=z--/++x的计算涉及操作符优先级和后缀前缀运算符,具体结果取决于操作符的顺序,但根据给定的变量值,结果不可能是3.5,因此可能的答案是B或C,具体取决于编译器如何解析这个表达式。 4. 关键字使用...

    《Java 技术》实验报告1

    内部类(也叫嵌套类)是定义在另一个类内部的类,它可以访问外部类的所有成员,包括私有成员,常用于实现某些特定的功能或封装相关逻辑。 8. **多态的概念**:多态是指同一种行为可以有不同的表现形式,具体体现在...

    有关java基础的部分学习

    3. **首字符限制**:首字符可以是字母(A-Z或a-z)、美元符号($)或下划线(_)。数字不能作为首字符。 4. **后续字符**:后续字符可以是字母、数字、美元符号或下划线。 5. **保留字不可用**:如`class`、`...

Global site tag (gtag.js) - Google Analytics