Java第一篇:为什么是接口?
2024-08-28 16:01:06
好家伙,
写了一道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.安全:就是安全,
(新人浅薄理解,欢迎指正)
最新文章
- Atitit.研发管理软件公司的软资产列表指南
- python之登录小程序
- 17.Java 反射机制
- 一个assert的写法
- jQuery的XX如何实现?——3.data与cache机制
- Why Consumer Hardware Start-ups Fail
- Java中处理Linux信号量
- HDOJ/HDU 2550 百步穿杨(注意排序)
- as3 Loader程序域
- tflearn save模型异常
- 【BZOJ1009】GT考试(KMP算法,矩阵快速幂,动态规划)
- response重定向的网址中有中文乱码的解决办法
- Linux下实现普通用户免密码登录【超详细】
- HTML页面空格记录&;nbsp;&;ensp; &;emsp; (小计)
- 解决用低版本的客户端ORACLE 12提示ORA-28040的异常
- Rommel - C# 浅谈 接口(Interface)的作用
- mac上录制无声mp3
- ATS的curl清除缓存
- CDN使用心得:加速双刃剑
- c++向量