接口(三)——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方法自定义序列化过程. 但是这些自定义还不够 ...
随机推荐
- thinkphp3.2之模型(M层)
最近学习了php框架thinkphp,回头总结了些学习心得知识,希望对大家有帮助 1.模型的概念: 模型(Model)是 ThinkPHP 中一个很重要的概念,粗略的理解模型就是与数据库交互信息进行c ...
- 看看国外的javascript题目,你能全部做对吗?(分享)
本文转自@Aaron的博客,拿过来分享一下.原文:看看国外的javascript题目,你能全部做对吗? 题目一: (function(){ return typeof arguments; })(); ...
- php的一些小笔记--数学函数
通常我们使用的数学函数不多,经常出现的有 floor 地板->舍去 ceil 天花板->进一 round 四舍五入 rand 随机数 mt_rand 产生更好的随机数 pow 指数表达 ...
- 遇到的Fragment中使用setAdapter()设置ListView报空指针解决方案
场景是这样,底部4个tab导航栏.用的fragment. 但其中一个fragmentActivity1中使用ListVIew的setAdapter()方法时,总是报NullPointerExcepti ...
- 基于jeasyui的遮罩扩展[修复链式bug]
说明和使用方法看下面代码,直接复制下面代码保存为js文件,引用即可. 遮罩效果从datagrid中提取,针对jquery进行优化. 下载地址(附Demo):http://pan.baidu.com/s ...
- java中list、set和map 的区别
List按对象进入的顺序保存对象,不做排序或编辑操作.Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List).Map同样 ...
- Word Search 解答
Question Given a 2D board and a word, find if the word exists in the grid. The word can be construct ...
- Can you find it? 分类: 二分查找 2015-06-10 19:55 5人阅读 评论(0) 收藏
Description Give you three sequences of numbers A, B, C, then we give you a number X. Now you need t ...
- PSPInstance Object | Web Python
PSPInstance Object | Web Python The PSPInstance object is available to all PSP pages through the psp ...
- Machine Learning - Lecture 16
Reinforcement Learning (R.L.) ① MDPs (Markov Decision Processes) ② Value Functions ③ Value Iteration ...