在java面向对象编程的,抽象类和接口始终存在有疑问的地方,因为两者太多相似有太多不同,在刚开始学习的时候经常弄的不对,使用情景搞混,今天来总结之前学习Java中接口和抽象类的问题。

  抽象类

  了解:只声明,未具体实现。

abstract void cry();

  抽象方法必须使用关键字abstract进行修饰,如果一旦一个类中包含了abstract方法,那么这个类必须使用abstract进行修饰;因为抽象类中含有未实现的方法,抽象类不能被实例化;抽象类不一定包含抽象方法,也就是说抽象类可以没有抽象方法(那么这个抽象类为什么要设计呢?);抽象方法不能存在方法体;抽象类可以有实现了的方法当一类继承的父类是抽象类时,必须全部实现抽象类的抽象方法。

  对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。

包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。注意,抽象类和普通类的主要有三点区别:

 1)抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。

 2)抽象类不能用来创建对象;

 3)如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

  接口

  设计思想:高内聚低耦合

[public] interface InterfaceName { 

}

  使用implement关键字遵循接口:

class Animalimplements Interface1,Interface2,[....]{
}

  当一类实现多个接口时,如果此类事非抽象类那么必须实现该接口的全部方法;

原则:

  当一类实现了一个接口,就要实现此接口的全部方法;

  接口不能被实例化(正是由于接口的变量不能用private protected修饰,默认 public static final,而方法被隐式地指定为public abstract方法用其他关键字,比如private、protected、static、 final等修饰会报编译错误))

  接口中所有方法不能有方法体,也就是说必须是抽象方法;

  定义在接口中的变量,作为全局变量使用:访问形式 接口名.变量名。

  接口不能继承类,但是可以继承其他的接口。

 两者对比

  一个类只能单继承一个抽象类。但是一个类可以实现多个接口。

  成员变量:抽象类可以是任何类型,接口只能是public static final类型。

  成员方法:抽象类可以提供实现的方法体,接口中只能存在public abstract 方法。

  静态方法|代码块:接口中不存在,抽象类可以有。

 小结

   Java的继承是单继承,这种机制能够保证类的纯洁性,比C++的多继承机制简介。但是不可否认对子类的扩展有一定的影响,因此实现接口可以看做是对继承的一种补充。还有一点就是继承是层级式的,不太灵活。当修改其中某各类可能打破这种继承的平衡,而接口没有这样的麻烦,因为他只针对实现接口的类起作用。实现接口可在不打破继承关系的前提下,对某各类功能扩展,非常灵活。

慢慢人生路,学点Jakarta基础-深入剖析Java的接口和抽象类的更多相关文章

  1. 漫漫人生路-学点Jakarta基础-Java8新特性 Stream/Lambda

    背景 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk dat ...

  2. 慢慢人生路,学点Jakarta基础-JavaDoc标记

    本文对使用Maven工程构建Jenkinsjob时遇到的问题进行一下分析汇总. JavaDoc标记使用问题 一般Maven项目都有配置产生Java DOC,但是在Jenkins里面产生DOC会有一些严 ...

  3. 慢慢人生路,学点Jakarta基础-集合类

    动态改变内存 因为数组在存储之前需要先申请一块连续的内存空间并且在编译的收就必须确定好它的空间大小,在运行时控件的大小无法再随着需求的改变而改变,极易出现越界的情况,数据少时又会造成内存空间浪费. 主 ...

  4. 漫漫人生路,学点Jakarta基础-重写(覆盖)、重载

    首先我们现在开始进入Jakarta的时代,由原甲骨文易主到 Eclipse基金会下,但是不想舍弃java名字,因此基金会重新投票选出了Jakarta EE(雅加达).但是我们明白换汤汤不换药的道理,基 ...

  5. 漫漫人生路,学点Jakarta基础-Java8函数式编程

    接口默认方法 Java8版本以后新增了接口的默认方法,不仅仅只能包含抽象方法,接口也可以包含若干个实例方法.在接口内定义实例方法(但是注意需要使用default关键字) 在此定义的方法并非抽象方法,而 ...

  6. Java基础——深入剖析Java中的装箱和拆箱

    (转自:http://www.cnblogs.com/dolphin0520/p/3780005.html) 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若 ...

  7. JAVA基础之——三大特征、接口和抽象类区别、重载和重写区别、==和equals区别、JAVA自动装箱和拆箱

    1 java三大特征 1)封装:即class,把一类实体定义成类,该类有变量和方法. 2)继承:从已有的父类中派生出子类,子类实现父类的抽象方法. 3)多态:通过父类对象可以引用不同的子类,从而实现不 ...

  8. 学多少年才算“精通Java”?

    我从毕业做程序员就开始用 Java,到现在已经工作快 20 年了.减去我做手游用 C++.Lua 的几年,再减去后来转管理写代码少的时间,我真正写 Java 代码的时间至少也在 10 年以上. 如果你 ...

  9. 小白学Docker之基础篇

    系列文章: 小白学Docker之基础篇 小白学Docker之Compose 小白学Docker之Swarm PS: 以下是个人作为新手小白学习docker的笔记总结 1. docker是什么 百科上的 ...

随机推荐

  1. zookeeper图形界面工具zooinspector

    链接: https://pan.baidu.com/s/1rabrwuC 密码: trwa zooinspector下载地址 解压后进入

  2. 使用与不适用@RequestBody注解的区别

    1. 如果使用@RequestBody接受页面参数: public Map<String,Object> insertBudget(@ApiParam(required = true,na ...

  3. 线程1—Runnable

    随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread类实 ...

  4. 监控rman备份

    1.服务会话关联通道设置 set COMMAND ID 命令 2.查询V$PROCESS和V$SESSION 决定会话对应的RMAN的通道 3.查询V$session_LONGGOPS监控备份集和复制 ...

  5. PostgreSQL Replication之第九章 与pgpool一起工作(2)

    9.2 理解pgpool的功能 pgpool提供了如下功能: •连接池 •语句级别的复制 •负载均衡 •限制连接 •内存缓存 •并行查询 [当决定使用那些功能的时候,记住并非所有的功能可以在同一时间使 ...

  6. OpenGL编程(五)绘直线以及分析绘直线的算法

    这次主要实现在窗口上绘制点.线以及修改其属性,另外还会分析画直线的原理和相关算法. 1.在窗口指定位置画点 glBegin(GL_POINTS); glEnd(); 使用glBegin()和glEnd ...

  7. Service和Servlet的区别

    1. 整体概念 Servlet是Java对于Web开发而产生的一项技术,可以说Servlet技术是Java专有的,它是服务器端的技术,客户端通常是浏览器,Servlet提供了请求/响应模式,是JAVA ...

  8. BZOJ 3110 [Zjoi2013]K大数查询(整体二分)

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 11654  Solved: 3505[Submit][St ...

  9. GIL解释锁及进程池和线程池

    官方介绍 ''' 定义: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple nati ...

  10. [NOIP2009提高组]最优贸易

    题目:洛谷P1073.Vijos P1754.codevs1173. 题目大意:有n点m边的图,边分有向和无向.每个点有一个价格,用这个价格可以买入或卖出一个东西.一个人从1出发,要到n,途中可以买入 ...