一、接口的作用

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

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

二、通过继承扩展接口

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. RBAC 基于角色的权限管理的简单实现

    1.什么是权限管理,权限管理就是对后台功能的细分,和对不同工作人员划分不同的工作的管理 RBAC是如何实现的,通过对不同控制器和控制器不同方法的限制,实现的管理. 要实现RBAC需要三张表,一张用户表 ...

  2. css white-space

    以下是对上面几个属性的测试效果如下: 具体代码如下: <!DOCTYPE html> <html lang="en"> <head> <m ...

  3. 【转】对memcached使用的总结和使用场景

    原文连接:http://blog.csdn.net/ajun_studio/article/details/6745791# 原文作者:halfMe 转载注明以上信息! 1.memcached是什么 ...

  4. 观点:哪些人适合做FPGA开发?(转)

    原文:http://xilinx.eetrend.com/blog/561 FPGA目前非常火,各个高校也开了FPGA的课程,但是FPGA并不是每个人都适合,FPGA讲究的是一个入道,入什么道,入电子 ...

  5. Android Service 通过 BroadcastReceiver 更新Activity UI

    1:MainActivity.java public class MainActivity extends Activity { private TextView tvInfo = null; pri ...

  6. load Event

    document.addEventListener("DOMContentLoaded");------------------load document.body.addEven ...

  7. Keil C51汉字显示的bug问题(0xFD问题)

    一.缘起 这两天改进MCU的液晶显示方法,采用“即编即显”的思路,编写了一个可以直接显示字符串的程序.如程序调用disstr("我是你老爸");液晶屏上就会显示“我是你老爸”. 二 ...

  8. QTableView使用HTML显示富文本

    对于QTableView中的显示,我们前面介绍过很多种,其中包括:文本.进度条.复选框等,今天我们介绍一下关于富文本的显示. 可能绝大多数小伙伴会通过QAbstractTableModel中的data ...

  9. C# Environment类_获取程序所在机器信息

    一.属性 CommandLine  获取该进程的命令行.CurrentDirectory 获取或设置当前工作目录的完全限定路径.ExitCode 获取或设置进程的退出代码.HasShutdownSta ...

  10. ubuntu下编译源码级QT

    注意必须好好看官方文档: http://qt-project.org/doc/qt-5/linux.html 包括编译Qt库依赖的包等等. 编译过程中发现以下错误: All the OpenGL fu ...