Design Pattern in Java[Challenge 2.1]
尝试用简单的语言,讲述复杂的事情。
如发现文中的错误,或内容需要补充,忘不吝指教!
CHALLENGE 2.1
Write down three differences between abstract classes and interfaces in Java.
要想回答这个问题首先要搞清楚几个概念问题。给出了一些概念在此引用
http://blog.csdn.net/chenssy/article/details/12858267
1.抽象类是什么
一个具有abstract methods的类叫做抽象类,抽象类中可以不含有任何抽象方法,但是如果类中含有一个或多个抽象方法那么该类必须声明为抽象类(并不强制所有方法都是abstract的)。
如果一个类没有足够的信息来描述一个具体的对象,而需要其他具体的类来支撑它,那么这样的类我们称它为抽象类。比如new Animal(),我们都知道这个是产生一个动物Animal对象,但是这个Animal具体长成什么样子我们并不知道(depend on runtime info),它没有一个具体动物的概念,所以他就是一个抽象类,需要一个具体的动物,如狗、猫来对它进行特定的描述,我们才知道它长成啥样。
在面向对象领域由于抽象的概念在问题领域没有对应的具体概念,所以用以表征抽象概念的抽象类是不能实例化的。
2.为什么会有不含有任何抽象方法的抽象类
因为抽象类是不能实例化的,所以可以通过对类声明abstract来阻止该类的实例化。
3.抽象类的作用
由于面向对象和运行时绑定的存在,我们无法在编译期间确定所有生成的具体对象,即多态的概念(polymorphism).我们通过建立一个basic abstract class 为所有derived class提供一些common method。以便我们可以通过这些common method来操作derived classes。用C++中的说法就是用父类的指针去操作子类instance,在Java中应该说是用父类的reference去操作子类的instance。所以抽象类的作用就是让其他类来继承它。
4.抽象类一些要求
1、抽象类不能被实例化(不能new 可以声明reference),这是因为抽象类无法描述一个完整的instance 所以要到运行时子类来instantiate.
2、抽象方法必须(Must be)由子类来进行重写,这是因为abstract class中的abstract method都是空方法,子类不实现它就无法使用。
3、只要包含一个抽象方法的抽象类,该方法必须要定义成抽象类,不管是否还包含有其他方法。
4、抽象类中可以包含具体的方法,当然也可以不包含抽象方法。
5、子类中的抽象方法不能与父类的抽象方法同名。
6、abstract不能与final并列修饰同一个类。这个很容易理解吧,abstract的意思就是让其他类来继承,final修饰class就是表示这个类不让别的类继承,同时修饰一个类就矛盾了。
7、abstract 不能与private、static、final或native并列修饰同一个方法。Abstract method就是留给子类实现的,要么是protected的要么是public的,否则子类得不到这个方法。Static会似的该方法静态化,可以直接通过abstract class来调用,但是abstract方法是空的,这样做是没意义的。
4.接口的作用
Interface使得所有实现了该接口的类建立了一套协议(protocol),使得这些类有了一套相同的manipulation。此外,在java中不能multiple inheritance所以无法通过继承抽象类来同时拥有多套common method。但是一个class可以实现多个interface,从另一个方面解决了 multiple inheritance的需求。
(2) 接口中不存在实现的方法。(前面已经介绍过了,所有方法都是空body的)
现在回到Design Pattern的 Challenge吧
- 一个类可以实现多个interface,但是最多只能继承一个Abstract class
- Abstract class 可以含有具体的(implemented的方法),而Interface中的全是空body的方法
- Abstract class可以使用成员变量,而Interface的成员变量都只能是static final的
- Abstract class可以通过 public,protected,private来修饰那些具体的方法,但是不能用private或者static,native等去修饰抽象的方法。而Interface中的方法都只能是public的,如图所示
- Abtract class可以定义constructor,Interface不行
abstract class C
{public void method(){};private void pri_method(){};void pack_method(){};abstract public void ab_pub_method();abstract protected void ab_pro_method();abstract private void ab_pri_method();//error}
interface A
{protected void A();//errorabstract void B();
}
Design Pattern in Java[Challenge 2.1]相关推荐
- Design Pattern - Service Locator Pattern--转载
原文地址:http://www.tutorialspoint.com/design_pattern/service_locator_pattern.htm The service locator de ...
- Java Singleton Design Pattern (单例模式 SE7 Gold)
singleton design pattern offer 2 things: one and only one instance of the class, and a global single ...
- Design Pattern: Observer Pattern
1. Brief 一直对Observer Pattern和Pub/Sub Pattern有所混淆,下面打算通过这两篇Blog来梳理这两种模式.若有纰漏请大家指正. 2. Use Case 首先我们来面 ...
- Design Pattern Quick Overview
Do we really need this design pattern? Just ignore, all the big guys requires it. For you, just unde ...
- 设计模式之-观察者模式(Observer Design Pattern)
当你订阅一个感兴趣主题消息,内容发生任何变化时都能够得到通知,观察者模式对你是非常有帮助的.在观察者模式中,一个对象监控另一个对象的状态,那这个对象被称为观察者,被监视的对象被称为主题. 一个主题对象 ...
- Design Patterns in Java
<Design Patterns in Java> 作者:Steven John Metsker,William C. Wake 出版日期:2006-04-28 语言:English 版本 ...
- [转]Design Pattern Interview Questions - Part 2
Interpeter , Iterator , Mediator , Memento and Observer design patterns. (I) what is Interpreter pat ...
- C# 版本设计模式(Design Pattern)(转)
C# 版本设计模式(Design Pattern)---------------总序 今天在写代码的时候,突然想到了一个非常有趣的问题,就是非常经典的一个问题:猫叫了,老师跑了,主人醒了. 也不知道自 ...
- 源于Design Pattern Explanation with C++ Implementation的 设计模式 C++
1.创建型模式 (Creational Pattern) 1.1 工厂模式(Factory Pattern ) 1.2 抽象工厂模式(Abstract Factory Pattern ) 1.3 ...
最新文章
- IBM确定公司未来存储技术发展方向
- c运行库、c标准库、windows API都是什么玩意
- Xilinx zynq-7000 SOC 设计导论
- SamplePairing:针对图像处理领域的高效数据增强方式 | PaperDaily #34
- 扎心!天天写代码,方向真的对吗?
- Jupyter 安装并配置工作路径[转]
- Getter DI是个好主意吗?
- PAT L1-027 出租
- Flutter布局锦囊---男女性别单选
- 宏excel怎么计算机,excel宏的使用/EXCEL 如何关闭宏
- 跟着Code走,详解Symbian Client/Server架构
- [分析力学]解题思路 - 拉格朗日方程
- 伪随机数认识 以及 公平的抽奖
- Vector的自动排序Sort
- BUG:索引字段超长-Specified key was too long; max key length is 767 bytes
- 怎么禁止电脑端的爱番番弹窗出现?
- 服务器上SQLserverAgent无法启动的解决方法
- uniapp微信小程序图片上传
- 高频变压器的设计与制作
- 反锐化掩膜_图像反锐化掩膜算法研究解析.doc
热门文章
- 【数据平台】sklearn库特征工程之特征选择和降维
- AES加密解密算法Java实现
- 两个单链表相交的一系列问题
- html中选择收货地址时候,收货地址.html
- python爬虫的应用-python网络爬虫应用实战
- AOP原理-创建AOP代理--AnnotationAwareAspectJAutoProxyCreator【InstantiationAwareBeanPostProcessor】的作用
- Spring的单元测试
- 实用技巧:使用 jQuery 异步加载 JavaScript 脚本
- hikaripool连接保持_springboot2的hikari数据库连接池默认配置
- 【Pytorch学习】用pytorch搭建第一个神经网络