Java接口和抽象类的区别
今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征:
继承:存在继承关系的子类和父类
重写:子类对父类的某些方法进行重写(多态下调用的是子类重写的方法)
父类引用指向子类对象:即向上转型,将子类的引用赋给父类的对象
然后,我们调用的时候,就是通过父类的对象去调用方法的。但是,一想接口好像也可以实现多态,并不是抽象类才可以,我们只要多个类实现同一个接口,也可以实现多态,
因此,转着转着,就转到了接口和抽象类的区别了。
接口
接口是一序列方法的声明,一序列方法特征的集合,一个接口只有方法的形状而没有方法的具体实现,接口是Java面向对象提供的一种机制。
Java语言是一种单继承的,在类的继承中可以实现多个接口代替了多继承
接口的申明:
public interface 接口类名称{
}
抽象类
抽象类是描述许多类的公共的地方,它是一个基类,在项目中主要用作很多类的基础类,比如对表中的增删改查,我们可以抽取一个基类来,然后让表结构的类去继承它,这样就省的我们去写那些基本的增删改查了
抽象类的申明:
public abstract 抽象类名称{
}
接口和抽象类的区别
接口和抽象类还是有一定区别的,接口可以看做是抽象类的一种更抽象化,接口是对动作(行为)的抽象,抽象类是对类的抽象,简单的来说,就是接口注重的是方法,而抽象类注重的是属性和方法
接口:
方法完全抽象的,并且方法必须是public,如果写成其他的编译时会报错,如果不写,则默认方法是public abstract
子类用implements来实现接口,子类需要实现接口中的所有方法
接口不可以new操作符实例化一个接口,但可以声明一个接口变量
接口可以继承一个或者多个接口
接口可以有变量,但是这个变量是不可以变的变量,它会自动的变为public static final
抽象类:
可以有方法的实现,但是这个方法不是abstract方法
子类用extends来继承抽象类,如果子类不是抽象类,则子类必须实现抽象类中的所有抽象方法,也可以实现抽象类中的非抽象方法
抽象类中可以有构造器
抽象类中可以有public,protected和default修饰符
抽象类可以继承一个类和实现多个接口
总的区别是:
抽象类可以有构造函数,接口不可以有构造函数
抽象类中可以有普通成员变量,接口中没有普通成员变量,只能有常量
抽象类中的方法可以被static修饰,接口中的方法不可以被static修饰
抽象类中可以有普通方法和抽象方法,接口中的方法全是抽象方法
抽象中的方法可以被public,protected等修饰符修饰,接口中的方法全都是public abstract的方法,如果省略修饰符,则默认的也都是public abstract修饰
一个类只能继承一个抽象类,接口可以被多实现,即一个类只能继承一个类,可以实现多个接口
什么时候使用接口,什么时候使用抽象类
如果你想拥有一些方法,并且这些方法有默认实现,那么久使用抽象类
如果你想实现多继承,那么就是用接口吧,java不支持多继承,但是可以实现多个接口
接口主要用于模块与模块之间的调用
抽象类主要用于当做基础类使用,即基类
Java接口和抽象类的区别的更多相关文章
- JAVA基础知识|java虚拟机(JVM)
一.JVM简介 java语言是跨平台的,兼容各种操作系统.实现跨平台的基石就是虚拟机(JVM),虚拟机不是跨平台的,所以不同的操作系统需要安装不同的jdk版本(jre=jvm+类库:jdk=jre+开 ...
- Java基础知识强化18:抽象类、接口的区别 和 选择性实现接口方法
1.抽象类和接口的区别 抽象类里面可以有非抽象的方法(可以没有抽象方法),接口里只能有抽象方法. 抽象类中的抽象方法声明时不能有大括号,而接口中的所有方法都没有大括号. 抽象类(abstract c ...
- java基础知识(6)---抽象类与接口
抽象类: abstract抽象:不具体,看不明白.抽象类表象体现.在不断抽取过程中,将共性内容中的方法声明抽取,但是方法不一样,没有抽取,这时抽取到的方法,并不具体,需要被指定关键字abstract所 ...
- [java基础知识]java安装步骤
jre: java运行环境. jre = java虚拟机 + 核心类库(辅助java虚拟机运行的文件).如果只是运行java程序,只需要安装jre. jdk: java开发工具集 jd ...
- java基础知识——Java的定义,特点和技术平台
(作者声明:对于Java编程语言,很多人只知道怎么用,却对其了解甚少.我也是其中一员.所以菜鸟的我,去查询了教科书以及大神的总结,主要参考了<Java核心技术>这本神作.现在分享给大家!) ...
- JAVA基础知识总结7(抽象类 | 接口)
抽象类: abstract 1.抽象:不具体,看不明白.抽象类表象体现. 2.在不断抽取过程中,将共性内容中的方法声明抽取,但是方法不一样,没有抽取,这时抽取到的方法,并不具体,需要被指定关键字abs ...
- java 基础知识(java web 方面的)
1.java面向对象的基本特征:封装性,多态性,继承性. 2.Java的泛型:iterator接口主要有hasnext()方法,next()方法,remove()方法:collection接口继承了i ...
- Java基础知识 String StringBuffer StringBuilder三者的区别(面试题)
相同点:String.StringBuffer.StringBuilder最终底层存储与操作的都是char数组,StringBuffer和StringBuilder都继承了AbstractString ...
- [转] Java基础知识——Java语言基础
http://blog.csdn.net/loneswordman/article/details/9905931 http://blog.csdn.net/wanghuan203/article/d ...
- java基础知识精华
转载:https://www.jianshu.com/p/6c078abb720f java基础知识 java内存模型 java运行时数据区域 hashMap 如何解决冲突 存储方式 冲突达到一定数量 ...
随机推荐
- ubuntu 16.04 + N驱动安装 +CUDA+Qt5 + opencv
Nvidia driver installation(after download XX.run installation file) 1. ctrl+Alt+F1 //go to virtual ...
- 使用极光推送(www.jpush.cn)向安卓手机推送消息【服务端向客户端主送推送】C#语言
在VisualStudio2010中新建网站JPushAndroid.添加引用json帮助类库Newtonsoft.Json.dll. 在web.config增加appkey和mastersecret ...
- 根据oracle的主键列生成SQLserver的主键
根据oracle的主键列生成MsSQLServer的主键列 select 'alter table ' || cu.table_name ||' add constraint '||' PK_' ...
- Node.js在Chrome进行调试
在开发node.js环境时候,调试是一件很疼苦的事情,不过随着时代不断发展,先如今已经有很多种node环境代码调试方式,今天我就笔记一下我使用的方式 node-inspector: node-insp ...
- Android 照相 滤镜
android-image-filter 19种相片滤镜,使用也简单,all filters in file BitmapFilter.java : Bitmap newBitmap = Bitmap ...
- Python 键盘记录
之前写的键盘记录最后一直在纠结弹框与不弹框的问题,代码找不到了,今天重新来一遍 #!/usr/bin/env python# -*-coding:utf-8 -*-from ctypes import ...
- 关于PHP语言
------php语言与JavaScript的使用 方法是相似 <script type="text/javascript"> </script>--js与 ...
- Mongodb常用命令介绍
查看命令的方式: 1.在shell中运行db.listCommands() 2.在浏览器中访问管理员接口:http://ipaddress:28017/_commands 下面介绍在Mongodb中最 ...
- php安装配置那些事(本文纯属个人记事与技术无关)
上周由于项目需要,又拿起了三年没动过的php,从安装环境到配置,大体已经忘干净,于是咨询同学问度娘,终于在我的win7系统下安装了xampp的集成环境+NetBeans IDE 8.0,于是导入项目文 ...
- Qt for Mac 安装(包括PyQt)
下载Qt: http://qt-project.org/downloads Qt5.2 for Mac:http://download.qt-project.org/official_releases ...