java 本质_Java-接口的本质

大道至简,本质往往是很朴素的。

本质:

类是主体,接口是主体之间交流沟通的规约。

位置:

1. 主体站两旁,连接接口的管道在两者之间;

2. 接口位于主体侧面;

3. 父类在主体类的头顶上,父类是对子类高一个概念层次的抽象(概念宽泛化);

61a5df7409a57f78f93bff72916df212.png

接口与主体的关系:

1. 两个沟通的主体,一个使用接口,一个实现接口;

2. 接口是动作的集合,实现接口,表明主体有能力执行接口约定的动作;

3. 使用接口的主体不需要实现接口,但需要知道接口:

a. 不知道约定的常量,则两方所指会有所混淆;

b. 不知道方法签名会被拒绝服务;

c. 不知道方法调用顺序,会被拒绝服务;

d. 使用接口的第一步可以是认证,不具备相应信息则会被拒绝;

4. 接口是主体的组成部分:

a. 接口是实现接口的主体的能力;

b. 接口是使用接口的主体的知识,或者说使用接口也是一种能力;

5. 主体可以具有多种能力,进行多种沟通,所以可以实现多个接口;

规约:

基本的:

1. 常量用以约定两方所指是同一个东西;

2. 方法签名以约定如果要对方做什么,需要提供什么;

组合的:

3. 如果沟通需要多个步骤,则需要约定调用方法的顺序;

这种规约Java接口无法实现,需要使用文档来说明和规范;

举例:

1. 主体同学甲和主体同学乙;

2. 主体乙有冰淇淋、冰棍儿,具有卖冰淇淋、冰棍儿的能力;

3. 主体乙把冰淇淋标记为第一种商品,冰棍儿标记为第二种商品;

4. 主体甲有钱;

5. 主体甲知道主体乙卖东西;

6. 主体甲知道第一种商品是冰淇淋;

7. 主体甲把钱给主体乙,并告诉他要买第一种商品;

8. 主体乙确认钱足够,并把第一种商品交付给主体甲;

9. 主体甲拿到冰淇淋;

Java描述:

1. ManJia, ManYi;

2.

interfaceSeller {int PRODUCT_BQL = 0;int PRODUCT_XG = 1;

Product sell(Money money,intproductNumber);

}class ManYi implementsSeller {

Product sell(Money money,intproductNumber) {if(isMoneyNotEnough(money)) {return null;

}if (productNumber ==PRODUCT_BQL) {returnfindBQL();

}

}

}

4.

classManJia {

Money money= Dad.give(100);

ManYi seller=Find.found();public voidbuy() {

Product bql=seller.sell(money, Seller.PRODUCT_BQL);

}

}

父类和接口:

1. 父类和接口是不同的概念,概念不同、位置不同;

2. 子类做为一个整体进行抽象,提升一个概念层次(泛化),成为父类;

接口是对子类部分能力的抽象;

3. 父类的概念比子类宽泛,子类在概念上无法脱离父类的范畴:白马始终是马;

接口是实现主体的一种能力,从这种能力的角度看,主体才是接口要表达的概念:

主体乙在卖东西的时候才是Seller;

为什么优先使用接口,而非抽象父类:

1. 优先从某种角度去界定,而非从整体上界定,留有余地,方便扩展;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值