一、接口

1. 接口简介

接口: 是java的一种抽象类型,是抽象方法的集合。接口比抽象类更加抽象的抽象类型。

接口语法:

[修饰符] [abstract] interface 接口名 [extends 父接口名列表]{
[public] [static] [final] 常量;
[public] [abstract] 方法;
[public] [static] 方法{};//JDK1.8后
[public] [static] 类/接口;
}

2. 接口成员的修饰符

接口中的所有成员的访问权限默认强制是 public

  • 变量: 默认强制是public static final
  • 方法: 默认强制是public abstract,即抽象方法。但JDK1.8后,允许定义静态方法public static,接口存在非抽象方法;
  • 内部类/接口: 默认强制是 public static

下面例子中的接口中定义了各种接口成员:

public interface InterfaceTest {

	int a = 10;//全局变量默认强制是 public static final

	 public static void staticMethod() {  //静态方法,JDK1.8下编译通过
System.out.println("");
} int abstractMethod(); //抽象方法 public static abstract class InnerClass{//抽象内部类,默认强制 public static
//......
} enum MyEnum{RED,BLUE,GRREN} //枚举类,默认强制 public static interface InnerInteerface{ //嵌套接口,默认强制 public static
void aa();
}
} class MyClass implements InterfaceTest{//实现上面的接口 @Override
public int abstractMethod() {//实现抽象方法 return 0;
}
}

注意一下,实现接口并不需要实现接口里面的内部抽象类成员、或者嵌套接口成员;

3. 接口的多继承

  接口是可以继承多个接口(在类中,是不允许多继承的)。由于接口的实例成员方法都是抽象方法,所以多继承不会对接口造成太大影响(不同父接口可以定义相同的方法),但还是有一点要注意的,多继承接口时,从父接口继承下来的方法,有相同的方法名,但不满足方法重载的条件,就会冲突。如果出现这种情况,编译将失败,不允许多继承。

interface A{
void sameMethodA();
} interface B{
void sameMethodA();
void sameMethodB(int a);//返回类型是void
} interface C{
int sameMethodB(int a);//返回类型是 int
} interface D extends A,B{ //编译通过,即使A,B定义了相同方法 } interface E extends B,C{//编译失败 }

字接口D多继承父接口A,B成功,但子接口E却多继承父接口B,C失败,就是因为两个接口定义的sameMethodB()除了返回类型外,方法名、参数列表都一样,这不满足方法重载,导致继承时方法冲突。

如果非得要多继承,Java的解决方案是使用 内部类或嵌套接口;

4. 接口与抽象类的区别

接口与抽象类的区别:

  • 抽象级别不一样: 接口更加抽象,JDK1.8前只允许抽象方法,JDK1,8后才允许存在静态方法;抽象类的抽象基本低,允许存在具体方法,甚至抽象类中可以没有抽象方法。但有抽象方法的类就必须是抽象类;
  • 接口对成员的定义时的修饰符都有固定的限制,参考前面;抽象类定义成员与普通类是一样的;
  • 接口中不允许定义初始化块(静态或实例),但抽象类允许定义这两种初始化块;
  • 接口中不能定义构造方法,但抽象类允许定义构造方法。

补充:抽象类中的抽象方法的访问权限是不能是private

二、嵌套接口

嵌套接口: 就是定义在类或接口中的接口。

嵌套接口的修饰符限制:

  • 不论定义在接口,还是类中,嵌套接口默认强制是 static。这意味着,嵌套接口是没有局部的嵌套接口。
  • 接口定义在类中,可以使用四种访问权限,定义在接口种,则只有public

类与接口(三)java中的接口与嵌套接口的更多相关文章

  1. 在java中,List是个接口,那实现List接口的类有哪些,有什么区别?

    在java中,List是个接口,那实现List接口的类有哪些,有什么区别? 解答: ArrayList是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引 ...

  2. 多线程(三) java中线程的简单使用

    java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依 ...

  3. Java开发知识之Java中的集合上List接口以及子类讲解.

    Java开发知识之Java中的集合类 一丶什么是集合类 如果你学习说数据结构,那么学习集合就很简单. 因为集合就是存储数据的结构. 例如 有链表结构 (list ) 还有 map结构.等等. 集合类就 ...

  4. 并发王者课-铂金1:探本溯源-为何说Lock接口是Java中锁的基础

    欢迎来到<并发王者课>,本文是该系列文章中的第14篇. 在黄金系列中,我们介绍了并发中一些问题,比如死锁.活锁.线程饥饿等问题.在并发编程中,这些问题无疑都是需要解决的.所以,在铂金系列文 ...

  5. Java中的继承抽象类和接口

    一.总结 1.使用extends关键字继承,eg: class Student extends Persion { ...}; 2.Java编程规范中类的首字母大写,方法的首字母小写单词首字母代谢,e ...

  6. 如何使用Externalizable接口自定义Java中的序列化

    Java序列化过程的缺点 我们都知道如何使用Serializable接口序列化/反序列化一个对象,并且如何使用writeObject 和readObject方法自定义序列化过程. 但是这些自定义还不够 ...

  7. java中String是对象还是类?详解java中的String

    有很多人搞不懂对象和类的定义.比如说java中String到底是对象还是类呢? 有人说String 既可以说是类,也可以说是对象. 其实他这么说也没问题, 类和对象其实都是一个抽象的概念. 我们可以把 ...

  8. Java基础学习(五)-- Java中常用的工具类、枚举、Java中的单例模式之详解

    Java中的常用类 1.Math : 位于java.lang包中 (1)Math.PI:返回一个最接近圆周率的 (2)Math.abs(-10):返回一个数的绝对值 (3)Math.cbrt(27): ...

  9. Java中HashMap(泛型嵌套)的遍历

    //Studnet package yzhou.gen03; public class Student<T> { private T score; public T getScore() ...

  10. Java中集合框架,Collection接口、Set接口、List接口、Map接口,已经常用的它们的实现类,简单的JDK源码分析底层实现

    (一)集合框架: Java语言的设计者对常用的数据结构和算法做了一些规范(接口)和实现(实现接口的类).所有抽象出来的数据结构和操作(算法)统称为集合框架. 程序员在具体应用的时候,不必考虑数据结构和 ...

随机推荐

  1. MapReduce中的倒排索引

    0.倒排索引资料: http://blog.csdn.net/pzasdq/article/details/51442856 1.三个日志源文件: a.txt hello tom hello jerr ...

  2. Linux环境下Java中文乱码解决方案

    相信很多朋友遇到过Java的乱码问题,最近我也在解决一个“使用文本生成图片过程中中文以及特殊字符乱码”的问题:花了我大量时间,Debug了sun.font.sun.awt下面的各种源码,终于搞懂了其机 ...

  3. Chapter 3 Phenomenon——19

    His unfriendliness intimidated me. 他的不友好恐吓到了我. My words came out with less severity than I'd intende ...

  4. Code First, Database First, Same Time区别

    Code First, Database First, Same Time是我理解的asp.net mvc中用到的三种model与数据库对应的方式,肯定是不全面的,理解也有些狭隘,今后随着自己的理解加 ...

  5. 基于opencv将视频转化为字符串Java版

    基于opencv将视频转化为字符串Java版 opencv java  先上一个效果图吧 首先,弄清一下原理 我们要将视频转化为字符画,那么就需要获取画面的每一帧,也就是每一张图片,然后将图片进行转化 ...

  6. zoj 1151 Word Reversal(字符串操作模拟)

    题目连接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1151 题目描述: For each list of words ...

  7. jQuery.Ajax()执行WCF Service的方法

    Insus.NET有在上一篇<ASP.NET MVC呼叫WCF Service的方法>http://www.cnblogs.com/insus/p/3720547.html 直接呼叫WCF ...

  8. jQuery实现DropDownList(MVC)

    今天学点什么呢?想来想去觉得DropDownList还是要加强功力,因为以前写ASP.NET网站时,此功能用的非常之多.在练习之前,先温习一下以前练习的<Html.DropDownListFor ...

  9. JUC源码阅读参考文章

    (飞哥)http://brokendreams.iteye.com/blog/2252081 (熊猫)http://blog.csdn.net/xiaoxufox/article/details/51 ...

  10. VS比较好用的扩展插件总结

    1.Indent Guides 绝对是必须的,有了这些辅助线,代码结构一目了然. 2.CodeMaid 整理与优化代码,并且可以清除空行.必备 把if语句块for语句块折叠 工具->扩展和更新, ...