一、接口的作用

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

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

二、通过继承扩展接口

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. 用Dockerfile构建docker image

    dockerfile是为快速构建docker image而设计的,当你使用docker build 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执 ...

  2. WordPress教程之判断文章所属分类函数in_category、is_category

    最近自己在修改一个采用Wordpress程序的博客的时候需要用到一个特殊的功能:我需要判断这篇文章是属于哪些分类,如果属于我设定的分类下的文章,则输出一个DIV内容.按道理说实现这个功能应该不算太难, ...

  3. 关于onclick中的event对象和element对象

    event.srcElement:引发事件的目标对象,常用于onclick事件. event.fromElement:引发事件的对象源,常用于onmouseout和onmouseover事件. eve ...

  4. SVN的错误: working copy locked

    提示:your working copy appears to be locked. run cleanup to amend the situation. 产生这种情况大多是因为上次svn命令执行失 ...

  5. logstash nginx 访问日志

    log_format main '$remote_addr [$time_local] "$request" ' '$request_body $status $body_byte ...

  6. python hook监听事件

    python hook监听事件 作者:vpoet mail:vpoet_sir@163.com # -*- coding: utf-8 -*- # # by oldj http://oldj.net/ ...

  7. HDU4762(JAVA大数)

    Cut the Cake Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  8. IOS百度地图语音导航

    VoiceNavigationViewController.m * 客户端需安装百度导航地图 #import "VoiceNavigationViewController.h" # ...

  9. Java单例模式的线程安全问题

    单例模式有两种书写模式:饿汉式和懒汉式. 1.饿汉式 class Single{ private final static Single s = new Single(); private Singl ...

  10. JS判断是不是Decimal类型(正则实现)

    备忘: function isDecimal(item) { var obj = $(item); if (obj.length > 0) { if ($(obj).val() != null ...