抽象方法

设计模式-装饰模式

被刻印的时光 ゝ 提交于 2019-12-23 13:49:44
对新房进行装修并没有改变房屋用于居住的本质,但它可以让房子变得更漂亮、更温馨、更实用、更能满足居家的需求。 例如一张照片,我们可以不改变照片本身,给它增加一个相框,使得它具有防潮的功能,而且用户可以根据需要给它增加不同类型的相框,甚至可以在一个小相框的外面再套一个大相框。 在软件设计中,我们也有一种类似新房装修的技术可以对已有对象(新房)的功能进行扩展(装修),以获得更加符合用户需求的对象,使得对象具有更加强大的功能。这种技术对应于一种被称之为装饰模式的设计模式 装饰模式注意事项:    (1) 尽量保持装饰类的接口与被装饰类的接口相同,这样,对于客户端而言,无论是装饰之前的对象还是装饰之后的对象都可以一致对待。这也就是说,在可能的情况下,我们应该尽量使用透明装饰模式。 (2) 尽量保持具体构件类 ConcreteComponent是一个“轻”类,也就是说不要把太多的行为放在具体构件类中,我们可以通过装饰类对其进行扩展。 (3) 如果只有一个具体构件类,那么抽象装饰类可以作为该具体构件类的直接子类 主要优点    (1) 对于扩展一个对象的功能,装饰模式比继承更加灵活性,不会导致类的个数急剧增加。 (2) 可以通过一种动态的方式来扩展一个对象的功能,通过配置文件可以在运行时选择不同的具体装饰类,从而实现不同的行为。 (3) 可以对一个对象进行多次装饰

Java中abstract和interface的区别

随声附和 提交于 2019-12-22 19:19:59
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意。其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解、对于设计意图 的理解是否正确、合理。本文将对它们之间的区别进行一番剖析,试图给开发者提供一个在二者之间进行选择的依据。 一、理解抽象类 abstract class和interface在Java语言中都是用来进行抽象类(本文中的抽象类并非从abstract class翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法,请读者注意区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?在面向对 象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一 个具体的对象,这样的类就是抽象类

常见java面试题总结

元气小坏坏 提交于 2019-12-22 18:39:48
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、String中的==和equals区别 答: == 操作符专门用来比较 两个 变量的值是否相等 ,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用 == 操作符。 如果一个变量指向的数据是对象类型的,那么,这时候涉及了两块内存,对象本身占用一块内存(堆内存),变量也占用一块内存,例如 Objet obj = new Object(); 变量 obj 是一个内存, new Object() 是另一个内存,此时,变量 obj 所对应的内存中存储的数值就是对象占用的那块内存的首地址。对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,即要看这两个变量所对应的内存中的数值是否相等,这时候就需要用 == 操作符 进行比较。 equals 方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对象是独立的。例如,对于下面的代码: String a=new String("foo"); String b=new String("foo"); 两条 new 语句创建了两个对象,然后用 a,b 这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即 a 和 b 中存储的数值是不相同的,所以,表达式

再说抽象类

廉价感情. 提交于 2019-12-22 18:27:08
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 深入理解Java的接口和抽象类   对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。这两者有太多相似的地方,又有太多不同的地方。很多人在初学的时候会以为它们可以随意互换使用,但是实际则不然。今天我们就一起来学习一下Java中的接口和抽象类。下面是本文的目录大纲:   一.抽象类   二.接口   三.抽象类和接口的区别    一.抽象类   在了解抽象类之前,先来了解一下抽象方法。抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法的声明格式为: abstract void fun();   下面要注意一个问题:在《JAVA编程思想》一书中,将抽象类定义为“包含抽象方法的类”,但是后面发现如果一个类不包含抽象方法,只是用abstract修饰的话也是抽象类。也就是说抽象类不一定必须含有抽象方法。个人觉得这个属于钻牛角尖的问题吧,因为如果一个抽象类不包含任何抽象方法,为何还要设计为抽象类?所以暂且记住这个概念吧,不必去深究为什么。  抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象。 [

程序员的真情告白

匆匆过客 提交于 2019-12-22 08:23:04
                           我能抽象出整个世界   但是我不能抽象出你   因为你在我心中是那么的具体   所以我的世界并不完整   我可以重载甚至覆盖这个世界里的任何一种方法   但是我却不能重载对你的思念   也许命中注定了 你在我的世界里永远的烙上了静态的属性   而我不慎调用了爱你这个方法   当我义无返顾的把自己作为参数传进这个方法时   我才发现爱上你是一个死循环   它不停的返回对你的思念压入我心里的堆栈   在这无尽的黑夜中   我的内存里已经再也装不下别人   我不停的向系统申请空间   但却捕获一个异常---我爱的人不爱我   为了解决这个异常   我愿意虚拟出最后一点内存   把所有我能实现的方法地址压入堆栈   并且在栈尾压入最后一个方法---将字符串"我爱你,你爱我吗?"传递给你   如果返回值为真--我将用尽一生去爱你   否则--我将释放掉所有系统资源 来源: https://www.cnblogs.com/azai/archive/2010/04/05/1704690.html

Java 面试前的基础准备 - 01

独自空忆成欢 提交于 2019-12-22 03:17:34
使用这个在线网页编辑真的是不习惯,还是 windows live writer 好。 下面列一个清单用于最近的面试:( 清单是网上down的 ) static,final,transient 等关键字的作用 foreach 实现原理 synchronized 和 volatile关键字 List,Map,Set 及其各种实现类,底层实现原理,实现类的优缺点 设计模式(单例【懒汉,饿汉,静态代码块,线程安全不安全】,工厂,观察,包装) 多线程(Runable 和 Thread) 什么是线程池, 以及线程池的优点 sleep() 和 wait() 的区别 IO(字节,字符,序列,内存,对象,打印。。。) 反射机制和内省机制 解析 xml文件几种方式的原理与特点 [ Dom, SAX, PULL ] sql 和 nosql(mysql 和 redis) 数据结构和算法(栈,队列,链表,树,图,排序,搜索) JDK 源码 JVM(GC 算法,垃圾回收器,类加载器,双委派类型,Java 内存模型,happens-before 原则) web 分布式 session 实现的方式(4种) SOA,RPC,dubbo 再添加几个快烂掉的点:override 和 overload,final 和 finally, static 关键字的作用: 作用在类上(该类 必须只能 是内部类,访问内部类的成员时

C# 多态理论基础

[亡魂溺海] 提交于 2019-12-22 01:02:53
一、概述 同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。 可以用不同的方式实现组件中的多态性: ● 接口多态性。 ● 继承多态性。 ● 通过抽象类实现的多态性。 二、实现 2.1、虚方法 定义:当类中的方法声明前加上 virtual 修饰符,则称之为虚方法。 作用:子类可以对父类中的虚方法进行重写,虚方法是多态特性的一种体现。 即,用 virtual 关键字修饰父类方法,用 override 关键字修饰子类方法,实现了方法重写。 特点: a)、使用了 virtual 修饰符后不允许再有 static 、 abstract 或 override 修饰符 b)、父类方法的访问级别和子类重写方法的的访问级别必须相同,即它们应该具有相同的访问修饰符 2.2、抽象类和抽象方法 描述:如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类,在抽象类中声明方法时,如果加上abstract时就是抽象方法。 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。 抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。 2.2.1

访问者模式

走远了吗. 提交于 2019-12-22 01:01:04
访问者模式定义如下:封装一些作用于某种数据结构中各个元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。 下面看一下几个抽象角色: Visitor抽象访问者:抽象类或接口,定义访问者可以访问哪些元素。 ConcreateVisitor具体访问者:它影响访问者访问到一个类之后该怎么办,做哪些事情。 Element抽象元素:接口或抽象类,声明接收哪一类访问者访问,程序中通过accept方法中的参数来定义 ConcreateElement具体元素:实现accept方法,通常是visitor.visit(this),基本上都是一种固定形式了 ObjectStructure结构对象:元素产生者,一般容纳在多个不同类、不同接口的容器,如List Map等,在项目中,一般很少抽象出这个角色 看一下访问者模式的通用代码: //抽象元素 public abstract class Element{ //定义业务逻辑 public abstract void doSomething(); //允许谁来访问 public abstract void accept(IVisitor visitor); } //具体元素 public class ConcreateElement1 extends Element{ //完善业务逻辑 public void doSomething(){

Java抽象类

╄→гoц情女王★ 提交于 2019-12-21 15:29:19
抽象类可以没有抽象方法,但有抽象方法的一定是抽象类 抽象类也有构造方法,但并不是提供给自己创建对象的,因为抽象类不能创建对象,而是给它的子类(不是抽象的)在创建对象时初始化父类用的 继承抽象类的子类必须重写所有抽象方法,否则它也必须是抽象的 来源: https://www.cnblogs.com/roadlandscape/p/12077047.html

Java面试题库及答案解析

核能气质少年 提交于 2019-12-20 23:48:06
1、面向对象编程(OOP)有哪些优点? 代码开发模块化,更易维护和修改。 代码复用。 增强代码的可靠性和灵活性。 增加代码的可理解性。 2、面向对象编程有哪些特性? 封装、继承、多态、抽象 封装 封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在Java当中,有3种修饰符:public,private和protected。每一种修饰符给其他的位于同一个包或者不同包下的对象赋予了不同的访问权限。 下面列出了使用封装的好处: 通过隐藏对象的属性来保护对象内部的状态。 提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展。 禁止对象之间的不良交互提高模块化。 继承 继承给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用,也可以在不修改类的情况下给现存的类添加新特性。 多态 多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作可以应用到其他类型的值上面。 抽象 抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。Java支持创建只暴露接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。 3、什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程