关于面试的准备(一)
来源:互联网 发布:织梦5.7自动内链失效 编辑:程序博客网 时间:2024/04/30 17:45
一,谈谈你对abstract和Interface的区别
首先,abstract和interface是java的两种抽象机制,真应为这两种机制使得java有了面对对象的强大生命力。abstract和interface有着不少的相识之处,但也有不少的不同之处,主要从语法和问题领域上的区别,后者是本质的区别。
1,语法上来说,abstrac 可以有构造函数,而interface 不行, abstract 可以有私有的,实现的方法,而interface只能是public abstrac的方法,接口中不用指明;抽象类中也可以有私有成员变量而interface中 abstract final的。子类只能继承一个类但可以继承多个接口。
,2,从问题领域上的区别是:抽象类要求子类和父类在概念上保持一致:是is a 的关系,而在接口中,不要求实现接口的类和接口保持一致,接口就是一个契约,要求实现它的类能够实现功能,是 like a的关系。
最后举出一个例子来更加清楚的理解它们之间的区别。
比如说,我们要设计一个门,它拥有open() 和 close() 的方法,如何设计呢,门是一个抽象的概念,当然我们可以用abstract 和 interface来定义
abstrac Class Door interface Door
{ {
abstract void open(); void open();
abstract void close(); void close();
} }
但是如果一种门具有Alarm的功能,如何设计呢。本例中主要探讨abstract和interface在设计理念上的区别,其它的问题不考虑。想给出
abstrac Class Door interface Door
{ {
abstract void open(); void open();
abstract void close(); void close();
abstract void alarm(); void alarm():
} }
class alarmDoor extends Door
{
void open(){}
void close(){}
void alarm();
}
但是这样会带来一个问题,Door的固有的方法和Alarm的方法混在一起,会因为alram()方法的改变例如参数而改变Door,违反了ISP原则。
我门设计的时候吧 AlarmDoor在概念上是Door ,而拥有Alarm的功能。
我们可以这样: interface Alarm {
void alarm() }
class alarmDoor extends Door implements Alarm
{
void open(){}
void close(){}
void alarm(){}
}
这个较好的反映了我们的设计意图,如果我们把 alarmDoor理解为它是一个Alarm 拥有了door的功能,则可以反过来。
- 关于面试的准备(一)
- Java菜鸟的面试准备(一)
- 面试的准备期(一)
- 关于面试要准备的
- 测试面试准备(一)
- 面试准备---计算机网络(一)
- 面试准备android(一)
- 关于2017的面试准备与记录
- 一、面试前的精心准备:
- 面试准备(一)----什么是xxx
- 前端面试准备(一)
- 准备复习一波,准备面试
- 2015.7.WH 面试准备 一
- Java面试准备一:集合
- 走近腾讯 走进腾讯(一个关于面试准备的记录)
- 关于常见的Java面试,你应该准备这些知识点
- 准备js面试容易被忽略的知识点总结(一)
- 面试准备之okhttp的使用及源码分析(一)
- 深度剖析:CDN内容分发网络技术原理
- UI学习三步走
- JVM基础研究整理之六--分代垃圾回收详述2
- DEDECMS下MYSQL查询嵌套及COUNT(*)等查询结果的输出
- 【Tesseract-OCR】在VS2010环境下调用API方法---简单快速之总结
- 关于面试的准备(一)
- 在嵌入式开发中常用两种服务tftp与nfs(资源的共享与上传,下载)
- UITabView
- A*寻路算法讲解+源码DEMO演示
- [jQuery] 2.2层级选择器(包含选择器,子选择器,相邻选择器,兄弟选择器)
- 《C和指针》读书笔记(10)
- C++中函数覆盖和使用虚函数有什么区别
- 【Machine Learning】逻辑回归 Logistic Regression
- HDU2037——今年暑假不AC