抽象类与接口比较

抽象类跟接口类似,都不能实例化,可能包含不需实现方法或已实现的方法。

抽象类可以定义一些不是静态或常量的字段,定义 public, protected, private访问级别的具体方法。

接口的所有字段自动是public、静态、常量,所有定义的方法的访问级别都是public。

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

抽象类使用场景

1、你想在几个密切相关的类共享代码。

2、你想让继承你抽象类的类有一些共用的字段或方法,或想设置protected, private的访问级别。

3、你想声明非静态或非常量的字段。这样可以定义访问或修改字段状态的方法。

接口使用场景

1、你想要不相关的类实现你的接口。

2、只想声明特定数据类型的行为,不关注实现的情况。

3、实现多继承效果。

例子

An example of an abstract class in the JDK is AbstractMap, which is part of the Collections Framework. Its subclasses (which include HashMap, TreeMap, and ConcurrentHashMap) share many methods (including get, put, isEmpty, containsKey, and containsValue) that AbstractMap defines.

An example of a class in the JDK that implements several interfaces is HashMap, which implements the interfaces Serializable, Cloneable, and Map<K, V>. By reading this list of interfaces, you can infer that an instance of HashMap (regardless of the developer or company who implemented the class) can be cloned, is serializable (which means that it can be converted into a byte stream; see the sectionSerializable Objects), and has the functionality of a map. In addition, the Map<K, V> interface has been enhanced with many default methods such as merge and forEach that older classes that have implemented this interface do not have to define.

Note that many software libraries use both abstract classes and interfaces; the HashMap class implements several interfaces and also extends the abstract class AbstractMap.

接口能不能有实现的方法?

Java8允许接口有默认方法和静态方法,只不过调用方式不一样,如下。

public interface RdNum {
void play(); static int getANum(){
return 123;
} default String getAStirng(String str){
return str + "嘤嘤嘤";
}
} public class R implements Interface {
......
} public class Test {
public static void main(String[] args){
R r = new R();
System.out.println(r.getAStirng("哈哈哈"));
System.out.println(RdNum.getANum());
}
}

总结

抽象类和接口的使用场景,可以简单理解为模板的抽象定义,给其他类继承。当定义的功能与继承的类关系不大时,用接口;当定义功能与继承的类关系密切时,用抽象类。

参考文献

https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html

Java抽象类(Abstract Class)与接口(Interface)区别的更多相关文章

  1. JAVA的abstract修饰符 && 接口interface用法 && 抽象类和interface的差别

    abstract修饰符可以修饰类和方法. (1)abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型(见后面实例),也就是编译时类型.抽象类就相当于 ...

  2. php中的抽象类(abstract class)和接口(interface)

    一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...

  3. 虚方法(virtual)和抽象方法(abstract)的和接口(interface)的区别

    虚方法(virtual)和抽象方法(abstract)的区别 2017年06月15日 13:41:26 阅读数:65 注:本文转载自 http://www.cnblogs.com/michaelxu/ ...

  4. java抽象类、多态、接口

    抽象类 抽象类的产生 当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的功能具体实现方式,那么这些方法都有具体的方法体. 但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但 ...

  5. java抽象类、抽象方法、接口、实现接口详解

    对于java中的抽象类,抽象方法,接口,实现接口等具体的概念就不在这里详细的说明了,网上书本都有很多解释,主要是我懒,下面通过一个例子来说明其中的精髓要点,能不能练成绝世武功,踏上封王之路,就看自己的 ...

  6. 虚方法virtual、抽象方法abstract、接口interface区别

    接口.抽象类.抽象方法.虚方法: 这四个名词时非常容易混淆的: 首先说一下接口 与抽象类 的异同: 相同点: 1.他们都不能实例化自己,也就是说都是用来被继承的. 2.抽象类中的抽象方法和接口方法一样 ...

  7. 转载 [c#] 虚函数(Virtual),抽象函数(abstract)和接口的区别

    1.virtual:允许被重写,但不强制要求.声明时提供其自身实现: 2.abstract:强制要求其继承者重写.声明时不提供其自身的实现,抽象类不能被实例化: 3.interface:接口就是协议, ...

  8. 小白心目中的Java抽象类(abstract class)

    在java开发中,我们有时会定义了一个父类,这个父类只有对方法的描述,但却没有在父类中写出对方法的实现,这种被定义的方法称为抽象方法.那么理所当然,含有抽象方法的类就称为抽象类.用关键字abstrac ...

  9. jdbc java数据库连接 4)PreParedStatement接口 之 区别和例子

    Statement 和 PreparedStatement 的区别: 1)语句不同 PreparedStatement需要预编译以及需要参数 2)由于PreparedStatement有缓存区,所以效 ...

随机推荐

  1. Javascript Cookie小插件

    var ManagerCookie = function(){ //添加cookie function addCookie(key,value,time,path){ key = encodeURI( ...

  2. 【转载】SQL语句用一个表的数据更新另一个表

    在Sqlserver的维护更新操作中,有时候涉及到Update操作,其中有一种情况是根据特定的条件,以一个表中的数据更新另一个表的数据,此时涉及到两个表之间的关系以及操作,此处介绍2种更新方法. (1 ...

  3. 第三讲 smart qq 登录成功后获取 vfwebqq ,psessionid,hash

    public static void Login_GetPHV() { string urldata = "{\"ptwebqq\":\"#{ptwebqq}\ ...

  4. ASP.NET MVC 学习笔记-5.Controller与View的数据传递

    ViewData属性 ViewData属性是System.Web.Mvc.ControllerBase中的一个属性,它相当于一个数据字典.Controller中向该字典写入数据,ViewData[“K ...

  5. [android] android下文件访问的权限

    /**************2016年5月4日 更新**************************/ 知乎:android编程中写文件(例如a.txt)后存在手机哪个位置啊? 用FileOut ...

  6. 推荐 3 篇关于 java8 Lambda表达式的文章

    State of the Lambda 这篇主要讲 Labmbda 的背景和用法 译文:深入理解Java 8 Lambda(语言篇--lambda,方法引用,目标类型和默认方法) State of t ...

  7. SpringBoot 配置静态资源映射

    SpringBoot 配置静态资源映射 (嵌入式servlet容器)先决知识 request.getSession().getServletContext().getRealPath("/& ...

  8. js 的运算

    1.parselnt() 2.parsefloat() 遇到第一个字节是非数字就结束了. 3.var a="hello world" a 这个变量是字符串了,对于里面每一个字母来说 ...

  9. Linux 系统的安装 (最全收集)

    在几年前,我曾经多次萌生抛弃Win系统,从而使用Linux系统-----(Ubuntu),但是我每次都会遇到同一个问题,TM怎么安装啊. 不是安装奇慢就是不知道安装的方法. 怎样安装Ubuntu操作系 ...

  10. 搭建基于nginx-rtmp-module的流媒体服务器

    1.业务流程图 2.软件下载 2.1 windows下载obs 2.2 linux 安装nginx(附加rtmp模块) 1.cd /usr/local 2.mkdir nginx 3.cd nginx ...