好家伙,

写了一道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.安全:就是安全,

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

Java第一篇:为什么是接口?的更多相关文章

  1. 学习Java第一篇——Java 安装及环境搭配

    内容提要: 1.下载JDK: 2.安装JDK: 3.配置JDK;   第一,下载JDK:  1.登陆网址:www.oracle.com 2.点击 Downloads 3.选择 Java SE 4.选择 ...

  2. java提高篇(九)-----实现多重继承

    多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需 ...

  3. java提高篇(八)-----实现多重继承

    多重继承指的是一个类可以同时从多于一个的父类那里继承行为和特征,然而我们知道Java为了保证数据安全,它只允许单继承.有些时候我们会认为如果系统中需要使用多重继承往往都是糟糕的设计,这个时候我们往往需 ...

  4. 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备

    相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结.所以下面给大家分享一下我的经验: 微信公众号是什么? 官网的介绍:再小的个 ...

  5. 从.Net到Java学习第一篇——开篇

    以前我常说,公司用什么技术我就学什么.可是对于java,我曾经一度以为“学java是不可能的,这辈子不可能学java的.”结果,一遇到公司转java,我就不得不跑路了,于是乎,回头一看N家公司交过社保 ...

  6. Java Nested Classes(内部类~第一篇英文技术文档翻译)

    鄙人最近尝试着翻译了自己的第一篇英文技术文档.Java Nested Classes Reference From Oracle Documentation 目录 嵌套类-Nested Classes ...

  7. Java基础知识常见面试题汇总第一篇

    [Java面试题系列]:Java基础知识常见面试题汇总 第一篇 文中面试题从茫茫网海中精心筛选,如有错误,欢迎指正! 1.前言 ​ 参加过社招的同学都了解,进入一家公司面试开发岗位时,填写完个人信息后 ...

  8. Java并发包下锁学习第一篇:介绍及学习安排

    Java并发包下锁学习第一篇:介绍及学习安排 在Java并发编程中,实现锁的方式有两种,分别是:可以使用同步锁(synchronized关键字的锁),还有lock接口下的锁.从今天起,凯哥将带领大家一 ...

  9. Java中常用的七个阻塞队列介绍第一篇

    Java中常用的七个阻塞队列介绍第一篇 在上一篇我们对Java中的队列分类做了简单的介绍.本文咱们主要来聊聊阻塞队列中的七个常用子类.这七个阻塞队列的学习步骤:先看源码,分析完源码之后,我们再来对每个 ...

随机推荐

  1. Django——表单

    一.前言 看了下教程,以为表单很简单呢,结果搞了一两个钟才弄懂,哈哈哈,所以说不要小瞧每一件事. 先说明下HTTP请求: HTTP协议以"请求-回复"的方式工作.客户发送请求时,可 ...

  2. Redis 中的事务分析,Redis 中的事务可以满足ACID属性吗?

    Redis 中的事务 什么是事务 1.原子性(Atomicity) 2.一致性(Consistency) 3.隔离性(Isolation) 4.持久性(Durability) 分析下 Redis 中的 ...

  3. Mybatis架构原理(二)-二级缓存源码剖析

    Mybatis架构原理(二)-二级缓存源码剖析 二级缓存构建在一级缓存之上,在收到查询请求时,Mybatis首先会查询二级缓存,若二级缓存没有命中,再去查询一级缓存,一级缓存没有,在查询数据库; 二级 ...

  4. Freeswitch使用originate转dialplan

    概述 Freeswitch是一款非常好用的开源VOIP软交换平台. 最近在对fs做一些功能测试,测试的过程中产生的一个需求,如何从fs发起呼叫并把后续的呼叫流程转到某一个dialplan上,这样在测试 ...

  5. UiPath Excel修改操作

    一.Excel 修改操作 1.删除行 (1)控件介绍 Insert/Delete Rows: 在特定位置添加或删除指定数量的行         常用属性介绍: Destination: NoRows: ...

  6. mysql中in的用法详解

    一.基础用法 mysql中in常用于where表达式中,其作用是查询某个范围内的数据. select * from where field in (value1,value2,value3,-) 当 ...

  7. 在mybatis中使用sum函数返回对象为Null

    首先大家看一下我的XML中的SQL .DAO  和实体对象 XML DAO PO 乍一看 没毛病. 但是在Mybatis中使用sum函数,如果返回值是0(就是你在Navicat中运行的的sql正常,结 ...

  8. HBuilderX配置外部服务器(tomcat)查看编辑jsp界面

    HBuilderX配置外部服务器(tomcat)查看编辑jsp界面 一.第一种方法,通过启动本地tomcat,查看jsp 在tomcat的webapps目录下创建文件夹HBuilderX 打开HBui ...

  9. android stdio开发抖音自动点赞案例

    最近做了一个安卓开发自动刷抖音. 点赞. 评论等等养号行为. 总结一下知识点和遇到的一些问题: 知识点: 1. 使用acessibility mode 对抖音自动化操作. android stdio中 ...

  10. Tapdata 的 2.0 版 ,开源的 Live Data Platform 现已发布

    https://www.bilibili.com/video/BV1tT411g7PA/?aid=470724972&cid=766317673&page=1 点击上方链接,一分钟快速 ...