一、接口的作用

①、为了能够向上转型为多个基类型

②、防止客户端程序员创建该类的对象——同抽象类

二、通过继承扩展接口

interface Monster{
void menace();
} interface Lethal{
void kill();
} //继承接口 但用的是extends
interface DangerousMonster extends Monster{
void destory();
} //支持多继承
interface Vampire extends Lethal,Monster{
void drinkBlood();
}

三、组合接口的名字冲突

//接口和类具有相同的方法
interface CanFight{
void fight();
} class ActionCharacter{
public void fight(){}
} //Hero可以不许要重写void fight()也可以创建
class Hero extends ActionCharacter implements CanFight{
}

当如果方法名一样,签名和返回值都不一样:

//接口和类具有相同的方法,不同的返回值
interface CanFight{
int fight();
} class ActionCharacter{
public void fight(){}
} class Hero extends ActionCharacter implements CanFight{
}
//直接编译报错:说明重载方法通过返回值是区分不开的

四:接口的适配模式

对象①获取已继承接口③的类②的对象,通过类②向上转型并调用类②的方法。

五:接口中的域

①、放入接口中的任何成员变量域都自动是static 和 final

②、接口中的方法都自动是Public

③、接口中的成员变量不能够为空,一定要被初始化(可以是非常量表达式)

public interface RandVlas{
int RANDOM_INT = new Random().nextInt(10);
}

④、因为是static的所以会在任何域首次被访问的时候初始化。

六、嵌套接口

(一)、接口可以嵌套在类或者其他接口中

//接口嵌套在类中
class A{
interface B{
void f();
}
} //接口嵌套在其他接口中
interface E{
interface G{
void f();
}
//接口自带的方法
void g();
}

嵌套举例

如何调用其中的接口:

//调用声明在类中的接口
public class BImp implements A.B{
public void f(){}
} //调用声明在接口中的接口
public class EGImp implements E.G{
public void f(){}
}
//E接口直接声明的方法
public class EImp implements E{
public void g(){}
}

调用接口

注意事项:

1.嵌套在另一个接口的接口自动为Public

2.实现某个接口的时候不需要嵌套实现其内部的接口

(二)、接口被实现为private,其优点

举例:前期准备

public class Test {
private A mA; //声明A接口
private interface A{
public void f();
}
//继承接口的实现类
public class AImp implements A{
@Override
public void f() {
// TODO Auto-generated method stub }
}
//外界获取A
public A getA(){
return new AImp();
}
//接收A,并调用其方法
public void receiveA(A a){
mA = a;
mA.f();
}
}

Test.java

调用

public class NestingInterfaces {

    public static void main (String args[]){
Test t1 = new Test();
Test t2 = new Test();
t2.receiveA(t1.getA());
/*错误:A a = t1.getA();
* t1.getA().f();
* */
} }

NestingInterfaces

作用:

Test.AImp只能被其自身使用,无法说其实现了private 接口A。强制类不允许向上转型。
getA()可以将返回值交给有权利使用它的对象receiveA()

七、接口与工厂方法(详见HeadFirst设计模式)

接口(三)——JAVA的多重继承的更多相关文章

  1. 【Java EE 学习 21 下】【 使用易宝支付接口实现java网上支付功能】

    一.网上支付分为两种情况,一种方法是使用直接和银行的支付接口,另外一种方法是使用第三方支付平台和银行对接完成支付. 1.直接和银行对接. 2.使用第三方支付平台 3.常见的第三方支付平台 二.使用易宝 ...

  2. 20145208 实验三 Java面向对象程序设计

    20145208 实验三 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...

  3. 零成本实现接口自动化测试 – Java+TestNG 测试Restful service

    接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, ...

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

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

  5. 命名和目录接口 JNDI-The Java Naming and Directory Interface

    命名和目录接口 JNDI-The Java Naming and Directory Interface JNDI (The Java Naming and Directory Interface)为 ...

  6. Android JNI学习(三)——Java与Native相互调用

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  7. 你应该这样去开发接口:Java多线程并行计算

    所谓的高并发除了在架构上的高屋建瓴,还得需要开发人员在具体业务开发中注重自己的每一行代码.每一个细节,面子有的同时,更重要的还是要有里子. 面对性能,我们一定要有自己的工匠精神,不可以对任何一行代码妥 ...

  8. 我对面向对象设计的理解——Java接口和Java抽象类

    在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...

  9. Java接口和Java抽象类的认识

    在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...

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

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

随机推荐

  1. 从外部导入jar包的三种方式

    我们在用Eclipse开发程序的时候,经常要用到第三方jar包.引入jar包不是一个小问题,由于jar包位置不清楚,而浪费时间.下面配图说明3种Eclipse引入jar包的方式. 1.最常用的普通操作 ...

  2. C# 导出Excel Aspose.Cells

    public void ExportExcel() { Workbook workbook = new Workbook(); //工作簿 workbook.Worksheets.Clear(); w ...

  3. InetAddress类的使用

    1.1. 简介 IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础.InetAddress是Java对IP地址的封装,在java.net中有 ...

  4. fitness

    大家一定要小心那些有6块腹肌的男人和永远保持好身材的女人 这些人拥有你所想不到的决心和意志力 还要小心那些冬天里 能唰的一下起床的人 他们什么事都能干的.

  5. PHP 中 const define 的区别

    在php中定义常量时,可用到const与define这两种方法,那他们到底有什么区别呢? 1.const用于类成员变量的定义,一经定义,不可修改.define不可用于类成员变量的定义,可用于全局常量. ...

  6. 1007 Numerical Summation of a Series

    简单入门题.按照题目给的指导编程,算多少数要理解题意. #include <stdio.h> int main(){ int k,ssx; double x,psix; ;ssx<= ...

  7. 将vim作为QT开发的IDE

    转载请注明链接与作者huihui1988 用了一段时间的vim,喜欢上了这种简洁高效的编辑器.恰逢正在学习QT中,于是将vim变成了开发QT的工具.以下是具体配置. 一.语法高亮支持: 1.打开VIM ...

  8. 【Xamarin挖墙脚系列:Xamarin的终极破解步骤(更新)】

    前面文章中,我们可以找到对应版本的补丁. Xamarin的 4.0.1717 版本,在补丁的地址中,有作者整理的全部的安装包.迅雷磁力贴: magnet:?xt=urn:btih:9FD298AA61 ...

  9. grok 正则也支持常规正则

    2016-08-29 17:40:01,19 INFO com.zjzc.common.utils.HttpUtil - 请求接口: https://www.zjcap.cn/pay/interfac ...

  10. selenium webdriver使用过程中出现Element is not currently visible and so may not be interacted with的处理方法

    参考文章: http://blog.csdn.net/passionboyxie/article/details/28661107 http://www.spasvo.com/ceshi/open/k ...