好家伙,

写了一道Java作业:

 

 一道简单的接口练习题

 

而答案也比较简单

public class Demo1 {

    public static void main(String[] args) {
Circle cir = new Circle();
Rectangle rec = new Rectangle();
cir.setR(4);
rec.setLength(3);
rec.setWidth(2);
System.out.println("面积为:"+cir.area()+"\t周长为"+cir.perimeter());
System.out.println("面积为:"+rec.area()+"\t周长为"+rec.perimeter()); }
}
//定义接口
interface IShape1{
public abstract double area();
}
interface IShape2{
public abstract double perimeter();
}
//定义类
class Circle implements IShape1,IShape2{
static final double pl=3.14;
double r;
public double getR() {
return r;
}
public void setR(double r) {
this.r = r;
}
public double area() {
return pl*r*r;
}
public double perimeter(){
return 2*pl*r;
}
}
class Rectangle implements IShape1,IShape2{
double length;
double width;
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double area() {
return width*length;
}
public double perimeter(){
return 2*(width+length);
}
}

那么问题来了,

 

接口存在的意义是什么?

 (他好像什么都说了,又好像什么都没说)

 

看到了一个很棒的解释:

接口的作用就是把使用接口的人和实现接口的人分开,

实现接口的人不必要关心谁去使用,而使用接口的人也不用关心实现的细节。

来自:java中接口的意义 - 简书 (jianshu.com)

举个例子:

我的笔记本的触摸板实在是太难用了,我希望能外接一个鼠标,

而这个鼠标使用统一的usb插头,那么我把这个鼠标的插口插到接口中,

就可以使用鼠标了

 

那么接口的意义就是:

(我给你一个用我的方法)

1.规范性:

如果一个项目比较庞大,那么就需要定义一些主要的接口,

这些接口不仅告诉开你需要实现哪些业务,而且也将命名规范限制住了
 
接口为类提供类规范:为哺乳动物定义speak方法,那么猫和狗的叫都是speak方法了
不会说出现,狗是汪汪叫,而猫是喵喵叫

再比如,我给笔记本接鼠标,接键盘,都是usb口的,二笔记本也提供了多个usb口,

我能插了就用,
 
而不是多个HDMI口或是雷电口而导致接不了用不了,这就是规范了

2.拓展性:

比如有一个类,实现了某个功能,突然有一天,发现这个类满足不了需求了,

然后又要重新设计这个类,给加方法,加特技,
 
我的猫,必须不但要会叫,还要会唱跳rap篮球,还要会空中翻跟斗
 
我的狗,也要会叫,还要会唱跳rap篮球,还要会空中翻跟斗
 
那么我用接口去为他们设计这些方法,拓展性更强
 
又比如我的笔记本屏幕好小,满足不了我了,我要外接一个大显示屏,这便是拓展了
 

3.便于维护:

出bug了,可以按着接口功能来一个个改,

(你定义接口接口的时候肯定要确定这个接口是负责干嘛的)

这个好理解,鼠标坏了,修鼠标,或者换一个,

4.安全:就是安全,

(新人浅薄理解,欢迎指正)

最新文章

  1. Atitit.研发管理软件公司的软资产列表指南
  2. python之登录小程序
  3. 17.Java 反射机制
  4. 一个assert的写法
  5. jQuery的XX如何实现?——3.data与cache机制
  6. Why Consumer Hardware Start-ups Fail
  7. Java中处理Linux信号量
  8. HDOJ/HDU 2550 百步穿杨(注意排序)
  9. as3 Loader程序域
  10. tflearn save模型异常
  11. 【BZOJ1009】GT考试(KMP算法,矩阵快速幂,动态规划)
  12. response重定向的网址中有中文乱码的解决办法
  13. Linux下实现普通用户免密码登录【超详细】
  14. HTML页面空格记录     (小计)
  15. 解决用低版本的客户端ORACLE 12提示ORA-28040的异常
  16. Rommel - C# 浅谈 接口(Interface)的作用
  17. mac上录制无声mp3
  18. ATS的curl清除缓存
  19. CDN使用心得:加速双刃剑
  20. c++向量

热门文章

  1. NC13328 倒水
  2. STM32单片机最小系统
  3. datax开启hana支持以及dolphinscheduler开启datax任务
  4. 4-3 Spring MVC框架-02
  5. 我们应该测试 DAO 层吗?
  6. rust里的内存对齐
  7. PHP单粒模式
  8. 精心总结十三条建议,帮你创建更合适的MySQL索引
  9. Javaweb05-Ajax
  10. 技术分享 | check(col_name<>'')为何把空格拒之门外