好家伙,

写了一道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. 【Azure 应用服务】App Service 开启了私有终结点(Private Endpoint)模式后,如何来实现公网Git部署呢?

    问题描述 因为中国区的App Service对外(公网访问)需要进行ICP备案,所以很多情况下,Web应用部署到App Service后,都是通过Application Gateway(应用程序网关) ...

  2. 上线项目之局域网上线软件使用-----phpStudy

    上面的图片是phpStudy的软件截图.那么你在哪里会下到呢?链接: https://pan.baidu.com/s/1lvX9jY_K6gGkMOqo76p4nA 提取码: h1it 复制这段内容后 ...

  3. SAP HTLM Control

    HTML 事件 效果 代码 *&---------------------------------------------------------------------* *& Re ...

  4. 关于 k 进制线性基

    本质还是高斯消元,使其成为上三角矩阵.但是 \(k\) 不一定是质数. 但我们不需要保证已有数字不改变,只要维护的是一个上三角矩阵就行.所以我们可以利用更相减损让其中一个向量的最高位 \(= 0\) ...

  5. 6 分钟看完 BGP 协议。

    上一篇文章见 万字长文爆肝路由协议! 上面我们聊 RIP .OSPF 协议都是基于 AS 即自治系统内的协议,可以把它们认为是域内路由协议:而下面我们要聊的就是 AS 之间的协议了,这也叫做域间路由协 ...

  6. 分布式事务(Seata)原理 详解篇,建议收藏

    前言 在之前的系列中,我们讲解了关于Seata基本介绍和实际应用,今天带来的这篇,就给大家分析一下Seata的源码是如何一步一步实现的.读源码的时候我们需要俯瞰起全貌,不要去扣一个一个的细节,这样我们 ...

  7. 聊聊 C++ 中的四种类型转换符

    一:背景 在玩 C 的时候,经常会用 void* 来指向一段内存地址开端,然后再将其强转成尺度更小的 char* 或 int* 来丈量一段内存,参考如下代码: int main() { void* p ...

  8. 暑假打工 2 个 月,让我明白了 Keepalived 高可用的三种路由方案

    暑假打工 2 个 月,让我明白了 Keepalived 高可用的三种路由方案 这是悟空的第 158 篇原创文章 原文链接:首发悟空聊架构 官网:www.passjava.cn 你好,我是悟空. 前言 ...

  9. VMware Workstation是可以跟hyper-v 共存的!

    VMware Workstation是可以跟hyper-v 共存的! 神奇的事情 之前一直不知道这个事情,后来发现,原来是可以的,震惊了我的双眼. 我之前一直用的是桌面的Docker Desktop ...

  10. 第二天python3 set常用方法

    set set的元素要求set的元素必须可hash,目前学过的不可hash的类型有list.set: 1.元素不可以被索引 可变的.无序的.不重复的元素的集合 2.set可以被迭代 set增加 add ...