java——为什么要有接口?和抽象类有什么不一样?
1.接口不是类,为什么?
接口如果是类,那就失去了java引入接口的意义了。
java之所以引入接口,就是为了弥补不能多继承的缺点,在java中每个类只能有一个超类,但却可以实现多个接口。
2.接口可以有静态常量(一定是静态的,无论写没写static),但是不能含有实例域,为什么?
接口就类似一个说明文档,定义继承接口的类应该必须有什么方法以及该方法的输入输出。
接口的思想不允许出现变量,接口只是对一类事物的属性和行为更高层次的抽象。对修改关闭,对扩展(不同的实现 implements)开放。所以接口中的属性必然是常量,只能读不能改,这样才能为实现接口的对象提供一个统一的属性。
3.接口中可以有静态方法,为什么?
JAVA SE 8中可以定义带有方法体的静态方法,以保证“源代码兼容”。
4.接口可以有静态常量,并且这个常量一定是静态的,为什么?
因为static是所有对象可以访问,而且可以直接通过类名访问。接口没有对象,必须通过类名来访问所以是要静态的。
5.内部接口默认是静态的,为什么?
接口不能被实例化,所以内部接口只有在静态时才有意义。 因此,默认情况下,无论是否手动添加静态,内部接口都是静态的。
想清楚这些,再想想接口和抽象类有什么不一样,什么时候用接口,什么时候用抽象类?
1.抽象类是类,但接口不是。
2.接口中的方法都是抽象方法,而抽象类必须有抽象方法,但也可以有普通方法。
3.接口定义的方法以及常量都是public,而抽象类是可以有私有方法或私有变量的。
4.实现接口需要实现接口中的每一个方法,而继承抽象类则可以选择实现抽象类中的一部分抽象方法,但此时这个子类仍然是一个抽象类。
5.接口可以实现多继承,但是一个类只能实现一个超类。
6.接口中定义的变量默认是public static final 型,必须给其初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是default 型,其值可以在子类中重新定义,也可以重新赋值。
接口更像是一种协议,实现接口的子类需要按照这种协议来编写自己的代码,但抽象类就更像一个不能实例化的普通类,只不过为了子类更加灵活多变,将一部分方法留给子类去实现,这也体现了java的多态。
java——为什么要有接口?和抽象类有什么不一样?的更多相关文章
- 1)Java学习笔记:接口和抽象类的异同
Java接口和抽象类很像,他们有哪些相同点和异同点呢,下面我们做一个小结 相同 ① 都不能被实例化,都位于继承树的顶端,用于被实现或者继承 ② 都可以包含抽象方法,实现接口或者继承抽象类的普通子类都必 ...
- Java之集合(一)接口及抽象类
转载请注明源出处:http://www.cnblogs.com/lighten/p/7278655.html 1.前言 从本章开始介绍Java的集合类,这些类主要存在于java.util包下,该系列基 ...
- 学JAVA第十八天,接口与抽象类进一步加深
昨天老师讲了建网站,还要交钱买东西的,所以就没写,今天讲了接口与抽象类进一步加深 上完今天的课后,我才知道一个接口可以有多个实现类,一个实现类可以同时接多个接口. 现在就用代码来解释吧!!! 举例用人 ...
- Java学习笔记之接口和抽象类
接口(interface)1.interface创建一个接口,implements实现接口 interface jiekou{} class lie implements jiekou{}2.接口可以 ...
- C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较
由于C++和Java都是面向对象的编程语言,它们的多态性就分别靠虚函数和抽象函数来实现. C++的虚函数可以在子类中重写,调用是根据实际的对象来判别的,而不是通过指针类型(普通函数的调用是根据当前指针 ...
- 【知了堂学习笔记】java 接口与抽象类
本次主角:抽象类 .接口. 对于皮皮潇这样一类的Java初学者来说,接口和抽象类如果不去花大量的精力与时间是很难弄清楚的,而我也是在最近这周的项目学习中感觉到了我对这两个概念不熟悉,所以导致对一些问题 ...
- (转)深入理解Java的接口和抽象类
原文地址: http://www.cnblogs.com/dolphin0520/p/3811437.html 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP ...
- 深入理解Java的接口和抽象类(转)
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- Java接口和抽象类的区别
今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...
- 深入理解Java的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
随机推荐
- 批处理基本知识以及进阶 V2.0
批处理基本知识以及进阶 将以要执行的程序指令 , 像在 dos 模式下一下写入记事本 , 保存成 bat 文件 , 就可以执行了 一 . 简单批处理内部命令简介 1.Echo 命令 打开回显或关闭请求 ...
- jetty启动常用命令
1. 启动Jetty Server:运行命令:Java -jar start.jar 指定项目名称启动: java -jar start.jar -Dname=zoush 保持jetty后台 ...
- (转)typedef和#define的用法与区别
typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像: ...
- CF609E Minimum spanning tree for each edge
原来觉得是一个LCT,感觉自己瞬间傻掉…… 考虑到先做一个最小生成树求出做最小生成树的代价$ans$,顺便标记一下树边和非树边,把边按照输入$id$排序回去之后扫,如果扫到一条树边,那么此时的答案就是 ...
- apache的Base64编解码
import org.apache.commons.codec.binary.Base64; String Base64.encodeBase64URLSafeString(byte[]) byte ...
- Entity Framework Tutorial Basics(8):Types of Entity in Entity Framework
Types of Entity in Entity Framework: We created EDM for existing database in the previous section. A ...
- Android开发环境搭建及HelloWorld
在开始Android开发之旅启动之前,首先要搭建环境,然后创建一个简单的HelloWorld.本文的主题如下: 1.环境搭建 1.1.JDK安装 1.2.Eclipse安装 1.3.Android S ...
- java全栈day04--方法
day04内容介绍 1 方法基础知识 2 方法高级内容 3 方法案例 一 方法的概念 A:为什么要有方法 提高代码的复用性 B 什么是方法 完成特定功能的代码块 修饰符 返回值类型 方 ...
- ubuntu 12.04 (64位)下安装oracle 11g过程及问题总结
最近公司用到oracle,在ubuntu64位安装了一下,碰到了一些问题,在网上搜索到了一些答案,在此作为笔记记录下来. 1.首先下载oracle并解压不再赘述. 2.安装依赖包 sudo apt-g ...
- c#中public,private,protected,internal的区别
public 可以被外部成员调用 private 只能在被类的成员调用 protected 只能在被类的成员和该类的子类调用 internal 可以在当前项目调用 pub ...