一、接口

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. 全网最详细的Xshell或SecureCRT下spark-shell里出现无法退格或者删除的问题现象的解决办法(图文详解)

    不多说,直接上干货! 前言 打开spark的命令行后,发现输错字符了,但是无法退格或者删除,这是比较苦恼的问题. 这个问题,得看你是用Xshell,还是SecureCRT. 一般是出现在SecureC ...

  2. 线性查找算法(BFPRT)

    BFPRT算法的作者是5位真正的大牛(Blum . Floyd . Pratt . Rivest . Tarjan). BFPRT解决的问题十分经典,即从某n个元素的序列中选出第k大(第k小)的元素, ...

  3. Linux-(rcp,scp)

    rcp命令 1.命令格式: rcp [参数] [源文件] [目标文件] 2.命令功能: rcp命令用在远端复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前 ...

  4. [Python] 震惊, 我居然用Python干这种事ꈍ .̮ ꈍ

    阅读本文只需花费你两分钟, 两分钟你买不了吃亏,你也买不了上当. 那么, 为何不静下心来看看呢? Python 海龟创意绘画, Turtle库创作精美图画 Author:Amd794     E-ma ...

  5. <Think Python>中统计文献单词的处理代码

    def process_line(line, hist):    """Adds the words in the line to the histogram. Modi ...

  6. Python web 框架之 Django 基础搭建服务

    1. 需要安装 Python 和 Django 环境,Python 环境的安装我就不在多说了 2. 安装框架 Django Django 安装,推荐先装个 pip吧,easyinstall也可以,然后 ...

  7. MySQL 学习笔记 二

    Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...

  8. [转]分布式中Redis实现Session终结篇

    本文转自:http://www.cnblogs.com/yanweidie/p/4763556.html 上一篇使用Redis实现Session共享方式虽然可行,但是实际操作起来却很麻烦,现有代码已经 ...

  9. 15天学习MVC后的小结(分享经历与想法)

    学习MVC已经有半个月,看了看日历,刚好半个月.分享了好几篇练习的博文:一,<创建第一个MVC应用程序> http://www.cnblogs.com/insus/p/3358560.ht ...

  10. PetaPoco源代码学习--2.TableInfo、ColumnInfo类和Cache类

    当把常用的特性填写到POCO实体类时,执行数据库操作时,需要根据实体类上的特性信息进行相应的操作,PetaPoco中的TableInfo和ColumnInfo类就是用来保存实体类上的特性信息. Tab ...