抽象类

先来了解抽象类的概念 : 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.
这样可能不好理解,我们可以举个例子,比如在自然界中有许多东西都是三角形的,但可以是直角三角形,广角三角形等等,因此我们可以将三角形写成一个抽象类,各种类型的三角形继承三角形这个父类的特性.
再举一个代码的例子,创建一个动物类

public class animal{public void bark(){}
}

我们可以看到动物类中有一个方法,“bark()”
这时我们创建一个猫类(继承动物)

publi class cat extend animal{public void bark(){System.out.println("喵喵");}
}

再创建一个狗类

publi class dog extend animal{public void bark(){System.out.println("汪汪");}
}

我们可以从上述代码中可以看出,猫和狗类都对动物中的"bark()"方法进行了重写,那么就产生了一个问题,cat可以"喵喵"叫,狗可以"汪汪"叫,但动物怎么叫?很明显实例化一个动物类是没有任何意义的.
因此我们把动物类写成

public abstract class animal{public abstract void bark(){}

当然这并不意味着在抽象类中就只能存在抽象方法,抽象类和实体类的区别主要在于,
1.抽象类中的抽象方法只能用public或protected修饰.
2.抽象类不能创建对象,即不能实例化.
3.如果一个类继承于一个抽象类,那么子类必须实现父类的抽象方法.否则,子类继承的方法还是抽象方法,子类也变成了抽象类,要用abstract修饰.(类似于生物界中的分类,科下面有属,属下面有种)

接口

接口,英文interface,在软件工程中,接口泛指供别人调用的方法或者函数.从这里我们可以看到接口的主要目的是对行为的抽象.
接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法.从这里我们可以看出抽象类和接口的不同了,接口更像是更加抽象的一种抽象类.
可以看出,允许一个类遵循多个特定的接口。如果一个非抽象类遵循了某个接口,就必须实现该接口中的所有方法。对于遵循某个接口的抽象类,可以不实现该接口中的抽象方法.

区别

具体区别
1抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法.
2抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的.
3接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法.
4一个类只能继承一个抽象类,而一个类却可以实现多个接口.

当然这样不便理解,我们通过上述例子已经可以认识到抽象类是对整体的类的抽象,而接口是一种行为规范.
例如,鱼和船本身并没有太多共同点,但它们都有"游"这个特点,我们可以设计一个 swim接口,含swim()方法,鱼和船都可以根据需求实现这个方法,如果再增加船的种类,去继承船就行.
网上有一个很适合理解的代码例子,门和警报的例子

abstract class Door {public abstract void open();public abstract void close();
}

门类,包含"open()","close()"方法

interface Door {public abstract void open();public abstract void close();
}

门接口
我们这时要给门加一个警报方法"alarm()",
有两种解决方案,一种是给抽象类门加入"alarm()"
还有一种是给接口门加入"alarm()"
若采用第一种方案,则所有的门都会有警报功能,这与事实相悖了,采用第二种方案,那么所有有警报功能的类都要实现"open()“与"close()”,这也与事实相悖了,因为类如火灾报警器并不存在一个"开关"功能.
所以最好的思路便是把alarm单独写成一个接口,让有警报需求的类去继承它.

interface Alram {void alarm();
}abstract class Door {void open();void close();
}class AlarmDoor extends Door implements Alarm {void oepn() {//....}void close() {//....}void alarm() {//....}
}

希望对你有帮助
参考
http://blog.csdn.net/xw13106209/article/details/6923556
https://baike.baidu.com/item/%E6%8A%BD%E8%B1%A1%E7%B1%BB/4748292?fr=aladdin
https://www.jb51.net/article/122723.htm

java 接口 抽象类相关推荐

  1. 自学Java如何入门?看完教你秒懂Java接口 抽象类区别!

    在面向对象编程中,抽象类和接口是两个经常被用到的语法概念,是面向对象四大特性,以及很多设计模式.设计思想.设计原则编程实现的基础.本文将主要讲解二者的区别 什么是抽象类和接口? 区别在哪里? 不同的编 ...

  2. java 接口 抽象类 继承 重载 重写 多态

    4.1 抽象类 在面向对象领域由于抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的. 同时,抽象类体现了数据抽象的思想,是实现多态的一种机制.它定义了一组抽象的方法, ...

  3. Java接口和Java抽象类

    Java接口和Java抽象类有太多相似的地方,又有太多特别的地方,究竟在什么地方,才是它们的最佳位置呢?把它们比较一下,你就可以发现了. 1.Java接口和Java抽象类最大的一个区别,就在于Java ...

  4. java 接口与抽象类的区别

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

  5. Java接口和Java抽象类的认识

    在没有好好地研习面向对象设计的设计模式之前,我对Java接口和Java抽象类的认识还是很模糊,很不可理解. 刚学Java语言时,就很难理解为什么要有接口这个概念,虽说是可以实现所谓的多继承,可一个只有 ...

  6. java怎么给类中的私有变量赋值_Java学习笔记分享 如何理解接口抽象类和关键字...

    不知不觉中,千锋重庆学习Java已经半个月了,同学们感觉受益匪浅.有一个同学本来是软件编程专业基础却是意外的差,什么标识符.变量的命名规则.方法的定义.数组.面向对象的封装.继承.多态,还有接口.抽象 ...

  7. java 抽象接口类,Java接口(interface)和Java抽象类(abstract class)的区别(详诉版)

    1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架, 当代表业务逻辑的高层抽象层结构合理时,你底层的具体实现需要考虑的就仅仅是一些算法 ...

  8. 腾讯架构师讲解Java接口的继承与抽象类

    在实施接口中,我们利用interface语法,将interface从类定义中独立出来,构成一个主体.interface为类提供了接口规范. 在继承中,我们为了提高程序的可复用性,引入的继承机制.当时的 ...

  9. Java中抽象类和接口在概念、语法和应用上的区别和关系

    2019独角兽企业重金招聘Python工程师标准>>> 春招开始了,盆友们都忙着准备笔试.准备面试,复习学过的知识点,当然我也不例外,在这里祝每一个"有心人"心想 ...

最新文章

  1. TechEd 2010-如何构建企业级ETL 后续补充
  2. FlashFXP客户端 FTP连接,连接很慢的情况,
  3. php扩展 静态库,编译PHP扩展的方法
  4. FPGA实验——译码器原理及实现
  5. mybatis学习(38):动态sql-foreach
  6. H3C认证无线高级工程师
  7. SecureCRT 远程端中文乱码问题处理
  8. PHP JSON中文乱码解决方法大全
  9. r语言adf检验结果怎么看_从AR模型到VAR模型——R语言实现
  10. 世界上最简单的会计书-笔记
  11. IDEA项目启动配置
  12. 计算机二级真题论文排版,计算机二级word真题:供应链的管理论文排版
  13. HC110110026 网络地址转换
  14. Eslint代码规范
  15. Open-Vocabulary Object Detection Using Captions(2021 CVPR)----论文解读
  16. 等额本息贷款月付款额的推导公式
  17. python学习——matplotlib使用之标注点学习
  18. css+js解决文本两端对齐以及分散对齐
  19. 应用全屏启动页适配小米9(水滴屏)
  20. 怎么安装VMware tools

热门文章

  1. 让 Evince 支持中文
  2. 长盈通递交注册:拟募资5亿 光谷将诞生一家科创板企业
  3. 老人、孩子和Linux
  4. 30多个DVR品牌现新漏洞,或致永久性Mirai感染
  5. android有病毒怎么清除,安卓手机幽灵推病毒怎么彻底清除?手机幽灵推病毒彻底清除方法...
  6. HTML form表单自动填写自动提交
  7. Python(matplotlib)画图设置正斜体,及中文宋体、英文Timenews--用于论文画图,导出高清晰图像
  8. OutLook邮箱新收的邮件总是存储在C盘,如何修改默认存储位置?
  9. Python金融数据挖掘 第7章 复习思考题 3
  10. aws elastic beanstalk入门之简介