接口(三)——JAVA的多重继承
一、接口的作用
①、为了能够向上转型为多个基类型
②、防止客户端程序员创建该类的对象——同抽象类
二、通过继承扩展接口
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的多重继承的更多相关文章
- 【Java EE 学习 21 下】【 使用易宝支付接口实现java网上支付功能】
一.网上支付分为两种情况,一种方法是使用直接和银行的支付接口,另外一种方法是使用第三方支付平台和银行对接完成支付. 1.直接和银行对接. 2.使用第三方支付平台 3.常见的第三方支付平台 二.使用易宝 ...
- 20145208 实验三 Java面向对象程序设计
20145208 实验三 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设计模式 实验步 ...
- 零成本实现接口自动化测试 – Java+TestNG 测试Restful service
接口自动化测试 – Java+TestNG 测试 Restful Web Service 关键词:基于Rest的Web服务,接口自动化测试,数据驱动测试,测试Restful Web Service, ...
- 多线程(三) java中线程的简单使用
java中,启动线程通常是通过Thread或其子类通过调用start()方法启动. 常见使用线程有两种:实现Runnable接口和继承Thread.而继承Thread亦或使用TimerTask其底层依 ...
- 命名和目录接口 JNDI-The Java Naming and Directory Interface
命名和目录接口 JNDI-The Java Naming and Directory Interface JNDI (The Java Naming and Directory Interface)为 ...
- Android JNI学习(三)——Java与Native相互调用
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- 你应该这样去开发接口:Java多线程并行计算
所谓的高并发除了在架构上的高屋建瓴,还得需要开发人员在具体业务开发中注重自己的每一行代码.每一个细节,面子有的同时,更重要的还是要有里子. 面对性能,我们一定要有自己的工匠精神,不可以对任何一行代码妥 ...
- 我对面向对象设计的理解——Java接口和Java抽象类
在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...
- Java接口和Java抽象类的认识
在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...
- 如何使用Externalizable接口自定义Java中的序列化
Java序列化过程的缺点 我们都知道如何使用Serializable接口序列化/反序列化一个对象,并且如何使用writeObject 和readObject方法自定义序列化过程. 但是这些自定义还不够 ...
随机推荐
- 用Dockerfile构建docker image
dockerfile是为快速构建docker image而设计的,当你使用docker build 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执 ...
- WordPress教程之判断文章所属分类函数in_category、is_category
最近自己在修改一个采用Wordpress程序的博客的时候需要用到一个特殊的功能:我需要判断这篇文章是属于哪些分类,如果属于我设定的分类下的文章,则输出一个DIV内容.按道理说实现这个功能应该不算太难, ...
- 关于onclick中的event对象和element对象
event.srcElement:引发事件的目标对象,常用于onclick事件. event.fromElement:引发事件的对象源,常用于onmouseout和onmouseover事件. eve ...
- SVN的错误: working copy locked
提示:your working copy appears to be locked. run cleanup to amend the situation. 产生这种情况大多是因为上次svn命令执行失 ...
- logstash nginx 访问日志
log_format main '$remote_addr [$time_local] "$request" ' '$request_body $status $body_byte ...
- python hook监听事件
python hook监听事件 作者:vpoet mail:vpoet_sir@163.com # -*- coding: utf-8 -*- # # by oldj http://oldj.net/ ...
- HDU4762(JAVA大数)
Cut the Cake Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- IOS百度地图语音导航
VoiceNavigationViewController.m * 客户端需安装百度导航地图 #import "VoiceNavigationViewController.h" # ...
- Java单例模式的线程安全问题
单例模式有两种书写模式:饿汉式和懒汉式. 1.饿汉式 class Single{ private final static Single s = new Single(); private Singl ...
- JS判断是不是Decimal类型(正则实现)
备忘: function isDecimal(item) { var obj = $(item); if (obj.length > 0) { if ($(obj).val() != null ...