Java abstract class 和 interface 的区别

1. abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制

2. 以Door的抽象概念为例,门一般有open和close动作,如果只有这些,通过abstract class或者interface来定义都可以,看起来没问题。

3. 但是Door应该还有一些抽象的属性,比如状态,大小、形状、材质等,这些放在interface定义里就不合适了(注:interface的成员变量必须是public static final的),应该用abstract class来定义,所以对同一类事物/问题域的抽象化定义应该用abstract class,比如鸟类、形状等。

4. 我们再想想,如何做一个有报警功能的AlarmDoor类,在abstract class里加alarm()方法不太合适吧,因为不是所有的门都有报警功能,也不能再定义Alarm的abstract class,因为Java不允许多重继承,这里应该用interface来定义,AlarmDoor实现IAlarm接口就可以了。所以对一个具体的类要实现某些新功能,可以通过interface来标准化。标准化的IAlarm接口还可以给其他需要报警功能的类使用,比如AlarmWindow。

Java abstract class 和 interface 的区别的更多相关文章

  1. 【转载】java abstract class和interface的区别

    转载:https://blog.csdn.net/b271737818/article/details/3950245 在Java语言中,abstract class和interface是支持抽象类定 ...

  2. 11)Java abstract class 和 interface

    abstract class 和 interface 的区别        含有abstract修饰符的class即为抽象类,abstract 类不能创建实例对象.含有abstract方法的类必须定义 ...

  3. abstract class与interface的区别与联系

    1.相同点:A. 两者都是抽象类,都不能实例化.B. interface实现类及abstract class的子类都必须要实现已经声明的抽象方法. 2. 不同点:A. interface需要实现,要用 ...

  4. Java abstract 抽象类 和interface接口的异同点

    abstract 抽象类 和interface接口的异同点 相同点: 抽象类和接口都不能实例化,他们都位于继承树顶端,被其他类实现和继承 都可以包含抽象方法,实现接口或者继承抽象类的非抽象类(普通类) ...

  5. Abstract Class与 Interface 的区别

    表格                                                                                               Abs ...

  6. AJPFX深入理解之abstract class和interface的区别

    含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象.含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必 ...

  7. AJPFX简述abstract class和interface的区别

    含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象.含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是 ...

  8. abstract class和interface的区别

    1. 引言 2. 概念引入 ●什么是接口? 接口是包含一组虚方法的抽象类型,其中每一种方法都有其名称.参数和返回值.接口方法不能包含任何实现,CLR允许接口可以包含事件.属性.索引 器.静态方法.静态 ...

  9. Java Abstract class and Interface

    Abstract Class 在定义class的时候必须有abstract 关键字 抽象方法必须有abstract关键字. 可以有已经实现的方法. 可以定义static final 的常量. 可以实现 ...

随机推荐

  1. [转帖]The Lambda Calculus for Absolute Dummies (like myself)

    Monday, May 7, 2012 The Lambda Calculus for Absolute Dummies (like myself)   If there is one highly ...

  2. JVM & Server & Connector & Context Relationship

  3. 虚拟机中CentOS 7下PHP环境配置

    为了简单起见,虚拟机网卡设置为桥接模式 1.yum install  httpd php 2.yum install mariadb 3.启动mariadb systemctl start maria ...

  4. 【原创】安装LoadRunner12.53 版本时出现Critical error的解决方法

    步骤: 1.在官网上下载LoadRunner12.53正版,只不过要注册,然后官网会给个序列号. 2.安装成功之后,快捷键已创建,打开Virtual User Generator时,提示如下错误: 此 ...

  5. html5设计原理(转)

    转自:   http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一 ...

  6. 17.linux下root用户与普通用户

    默认安装完成之后并不知道root用户的密码,那么如何应用root权限呢? (1)sudo 命令   这样输入当前管理员用户密码就可以得到超级用户的权限.但默认的情况下5分钟root权限就失效了. (2 ...

  7. Orcle基本语句(六)

    -- Created on 2017/1/5 by ADMINISTRATOR DECLARE -- Local variables here i ; v_name ) := '张晓风'; v_age ...

  8. iBatis的SQL注入

    sqlMap中尽量不要使用$;$使用的是Statement(拼接字符串),会出现注入问题.#使用的是PreparedStatement(类似于预编译),将转义交给了数据库,不会出现注入问题:.前者容易 ...

  9. Python自动化 【第十五篇】:CSS、JavaScript 和 Dom介绍

    本节内容 CSS javascript dom CSS position标签 fixed: 固定在页面的某个位置 relative + absolute: 相对定位 opacity:0.5 设置透明度 ...

  10. 代码中AggregateException的处理

      在async方法中,发生一个异常时,代码并不会直接跳到catch语句中去,而是继续执行,所以到最后catch语句中得到的错误信息是one or more exceptions occurs- 这样 ...