抽象类

《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”。只要用abstract修饰的类就是抽象类,抽象类不一定包含抽象方法,但有抽象方法的类一定是抽象类。抽象方法是用abstract关键字修饰的方法,不用实现方法细节,由继承了它的子类去实现。

[public] abstract class ClassName {
abstract void fun();
}

抽象类注意三点:

  • 抽象方法必须为public或protected,因为private无法被子类继承,就无法实现该方法,默认为public.
  • 抽象类不能创建对象.
  • 如果子类继承的父类是抽象类,而没有实现它的抽象方法,那么子类也必须修饰为abstract.

接口

接口(interface)在软件工程泛指供别人调用的方法或函数。在Java中,接口是一种行为的抽象,比抽象类更加抽象的极度抽象类型,接口中定义的变量都会被修饰为public static final,而且必须赋初值,因此接口中只有常量;接口中的方法只能是public abstract修饰的,其它的会报错。

[public] interface InterfaceName {
public static final String s = "hello";
public abstract void fun();
}

接口注意两点:

  • 接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都必须是公开(public)类型的,确保外部使用者能访问它们
  • 接口不涉及和任何具体实例相关的细节,因此接口没有构造方法,不能被实例化,没有实例变量,只有静态(static)变量,被final修饰后就变为了常量。

接口与抽象类的区别

语法层面

  1. 抽象类可以提供成员方法的实现细节,而接口只有抽象方法
  2. 抽象类可以有各个类型的成员变量,而接口只有public static final型的
  3. 抽象类中可以有静态和非静态代码块,而接口不行
  4. 一个类只能继承一个抽象类,可以实现多个接口

设计层面

抽象类是一种事物的抽象,而接口是一种行为的抽象。简单来说,抽象类为继承的子类提供了一个模板,子类根据实际需求实现不同的细节,就像Android开发中为Activity绑定Fragment的过程,许多代码都是不变的,只是实现不同的Fargment实例,这就可以创建一个抽象类,将创建实例的过程定义在抽象方法中,而其它的部分定义在普通方法中,大大减少了代码量;接口相当于定义了一个行为,比如Fly,Bird类可以实现这个接口,拥有飞的行为,而Dog类则不行。继承关系强调“是不是”,而接口强调“有没有”。

接口的写法

接口不能实例化,也就是直接new出来,但我们常会看到这两种写法


List<String> list = new ArrayList<>(); public Runnable r = new Runnable()
{
@Override
public void run()
{
//Details
}
}

前一种是Java的多态,list可以指向实现它的接口的类;后一种是匿名内部类的写法,详解见Java--匿名内部类

Java 接口与抽象类的更多相关文章

  1. java 接口和抽象类的区别

    java 接口和抽象类的区别抽象类:1.含有抽象方法的类一定为抽象类,反过来抽象类,不一定含有抽象方法:2.抽象类必须用abstract来进行定义,抽象方法也必须用abstract来进行定义:3.抽象 ...

  2. 初探设计:Java接口和抽象类何时用?怎么用?

    今天犯了个错: “接口变动,伤筋动骨,除非你确定只有你一个人在用”.哪怕只是throw了一个新的Exception.哈哈,这是我犯的错误. 一.接口和抽象类 类,即一个对象. 先抽象类,就是抽象出类的 ...

  3. Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类?

    Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类? 2013-01-05 17:16:09|  分类: JAVA |  标签:java  |举报|字号 订阅     下面比较一下两者的 ...

  4. Java接口和抽象类的区别

    今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...

  5. java接口和抽象类

    关于接口 1.创建一个接口,需要使用interface关键字. 2.实现一个接口,需要使用implements关键字. 3.接口的成员属性都是静态常量(默认public static final). ...

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

    接口可以是标志接口,里面没有任何常量和方法. 抽象类不一定必须有抽象方法,也可也没有方法,但含抽象方法的类必须被声明为抽象类. 在抽象层次结构中,Java接口在最上面,然后紧跟着抽象类,然后是一般类. ...

  7. Java接口和抽象类的实现方法

    一.java中的接口本质上是加约束的抽象类 //抽象类 public abstract class AExample { public abstract int add(int x,int y); p ...

  8. Java 接口和抽象类差别

    原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想非常大程度上取决于它的总体架构,而这个总体架构事实上 ...

  9. Java接口和抽象类的理解

    接口和抽象类的相同之处就是 都会有抽象方法 抽象方法就是一个没有方法体 等待继承的子类完成的方法 然而接口比较严格 它的方法必须是抽象方法且是公开的 抽象类 可以有自己的属性 和 实体方法 首相用面向 ...

  10. java接口与抽象类

    本片随笔讲讲java中接口与抽象类. 一,接口 1.什么是接口? 那在日常生活中接口是什么呢?就是两个对象之间进行连接的部分就是接口,就比如热水器与水管的接口一样,他可以确保不同的东西之间的顺利连接, ...

随机推荐

  1. Oracle 11.2.0.4在线(Online mode)打补丁14084247解决WRH$_ACTIVE_SESSION_HISTORY不会自动切割的问题

      安装了Oracle Database Release 11.2.0.4之后,发现WRH$_ACTIVE_SESSION_HISTORY始终不会自动分割删除,   后来才发现需要应用补丁:14084 ...

  2. 解决java计算中double类型结果不一致问题,使用BigDecimal解决

    一.需求:从数据表中读出一个double的数据,比如是3.5,没问题,但是如果再用3.5进行计算,比如乘以100,结果就是350了,而是35000000004 因为是浮点运算,所有语言中的浮点数都会有 ...

  3. gcc -O0 -O1 -O2 -O3 四级优化选项及每级分别做什么优化【转】

    转自:http://blog.csdn.net/qinrenzhi/article/details/78334677 相关博客http://blog.chinaunix.net/uid-2495495 ...

  4. Oracle基础结构认知—初识oracle【转】

    Oracle服务器(oracle server)由实例和数据库组成.其中,实例就是所谓的关系型数据库管理系统(Relational Database Management System,RDBMS), ...

  5. PHP在引号前面添加反斜杠的原因及PHP去除反斜杠的办法

    昨天用PHP做了个读写html文档的小程序,本地测试正常但是传到网站后发现,提交内容保存的时候会自动在双引号前面增加一个反斜杠“\”,而且每保存一次增加一个反斜杠,很是郁闷. 当然做这个只是为了参加电 ...

  6. 组合比较符(PHP7+)

    php7+支持组合比较符,即<=>,英文叫做combined comparison operator,组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较. 语法:$a& ...

  7. 数据库-mysql中文显示问题

    一:在mysql 下面查看带中文的记录显示乱码 mysql> select * from role; +----+------+ | id | name | +----+------+ | 1 ...

  8. JQ实现情人节表白程序

    JQ实现情人节表白页面 效果图: 表白利页,你值得拥有哦! 代码如下,复制即可使用: <!doctype html> <html> <head> <meta ...

  9. mac上Homebrew安装以及python安装

    Homebrew homebrew是一款Mac OS平台下的软件包管理工具,拥有安装.卸载.更新.查看.搜索等很多实用的功能. Homebrew常用命令 查看brew的帮助:brew –help 安装 ...

  10. windows环境下的heap spray+stack pivot gadget 实现绕过dep

    ASLR+DEP是windows平台下最为常见的两种保护手段.这两种手段使得最基础的jmp esp等手法不再适用,而单纯的堆喷也会因为堆内存不可执行而失效.那么这里就来介绍一下heap spray+s ...