抽象方法

php抽象类和接口的区别

為{幸葍}努か 提交于 2019-11-30 20:55:09
抽象类 官方描述请查看文档,下面是官方描述的梳理版本: 1、定义为抽象的类不能被实例化。任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。(抽象类可以没有抽象方法,但是抽象类依然不能被实例化)被定义为抽象的方法只是声明了其调用方式(参数), 不能 定义其具体的功能实现。 如 abstract class AbstractClass {    // 强制要求子类定义这些方法,且不能定义具体功能 注意没有大括号{}    abstract protected function getValue ();    abstract protected function prefixValue ( $prefix ); // 普通方法(非抽象方法)    public function printOut () {     print $this -> getValue () . "\n" ;    } } 2、 继承一个抽象类的时候,非抽象子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。 3、此外方法的调用方式必须匹配,即类型和所需参数数量必须一致。例如,子类定义了一个可选参数( 类似function eat(

JavaSE笔记

回眸只為那壹抹淺笑 提交于 2019-11-30 19:33:51
一、 初识Java编程 1、 Java开发环境 JDK Java开发工具 JVM Java虚拟机 JRE Java运行环境 2、实现第一个hello world public class Hello{ public static void main(String[] args){ System.out.println("hello man!"); } } 执行代码: (1) 在命令窗体输入: javac 文件名.java (2) 输入:java 文件名 注意: (1) 类名和文件名要保持一致; (2) Java源代码中的所有标点符号使用英文输入法状态输入; (3) Java源代码是区分大小写; (4) 类名默认都使用大写; 3、Java运行原理 4、变量的声明 声明语法: 数据类型 变量名 ; 赋值: 变量名 = 值; 示例: public class Hello{ public static void main(String[] args){ //声明整数类型的a,在内存中创建这个变量 int a; double b; double c; //给变量赋值 a = 1; b = 2; System.out.println(a/b); } } 5、标识符 (1) 标识符是用于类名、变量名、方法名、对象名、数组名等的命名; (2) 可以使用英文、数字、下划线_、$符号; (3)

JAVA基础复习(重点)

﹥>﹥吖頭↗ 提交于 2019-11-30 19:24:05
一、 初识Java编程 1、 Java开发环境 JDK Java开发工具 JVM Java虚拟机 JRE Java运行环境 2、实现第一个hello world public class Hello{ public static void main(String[] args){ System.out.println("hello man!"); } } 执行代码: (1) 在命令窗体输入: javac 文件名.java (2) 输入:java 文件名 注意: (1) 类名和文件名要保持一致; (2) Java源代码中的所有标点符号使用英文输入法状态输入; (3) Java源代码是区分大小写; (4) 类名默认都使用大写; 3、Java运行原理 4、变量的声明 声明语法: 数据类型 变量名 ; 赋值: 变量名 = 值; 示例: public class Hello{ public static void main(String[] args){ //声明整数类型的a,在内存中创建这个变量 int a; double b; double c; //给变量赋值 a = 1; b = 2; System.out.println(a/b); } } 5、标识符 (1) 标识符是用于类名、变量名、方法名、对象名、数组名等的命名; (2) 可以使用英文、数字、下划线_、$符号; (3)

行为型设计模式(下)

蹲街弑〆低调 提交于 2019-11-30 19:19:39
策略模式:    1、定义: 定义了一系列算法,并将每个 算法封装起来 ,使它们可以 相互替换 ,且算法的变化不会影响使用算法的客户    2、模型结构:     (1)抽象策略(Strategy)类:定义了一个公共接口,各种 不同的算法以不同的方式实现这个接口 ,      环境角色使 用这个接口调用不同的算法 ,一般使用接口或抽象类实现     (2)具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供 具体的算法实现     (3)环境(Context)类: 持有 一个策略类的引用,最终给客户端调用    3、优点:     (1)使用策略模式可以 避免使用多重条件转移语句     (2)提供一系列可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而 避免重复的代码     (3)提供了对 “开闭原则” 的完美支持,在不修改原有系统的基础上选择算法或行为,也可灵活地增加新算法或行为     (4)策略模式可以提供相同行为的不同实现,客户可根据 不同的要求选择不同的实现     (5)策略模式把算法的使用放到环境类中,而算法的实现移到具体策略类中,实现了 二者的分离    4、缺点:     (1)客户端必须 理解 所有策略算法的 区别 ,以便 适时选择恰当 的算法类     (2)策略模式将造成 产生很多策略类

Java相关知识2

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-30 18:43:54
11、是否可以从一个static方法内部发出对非static方法的调用? 不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。 12、Integer与int的区别 int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况。 例如:要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。 在Hibernate中,如果将OID定义为Integer类型

设计模式 - 工厂模式

孤者浪人 提交于 2019-11-30 18:07:45
概述 我们都知道 Java 中一共有 23 种设计模式,其中工厂模式分为三种,即:简单工厂模式(不在 23 种设计模式之列)、工厂方法模式和抽象工厂模式;我们平时说的工厂模式,其实大都指工厂方法模式,这种模式是我们平时编码中用的频率最高的一种,在 Spring 源码中就有很多工厂模式的应用,比如 BeanFactory 。 下面依次按照简单工厂模式、工厂方法模式、抽象工厂模式的顺序,依次由浅入深说说这三种模式;文章分别从定义、场景、优缺点也示例进行讲解。 简单工厂模式 定义 简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类的实例,简单来说就是, 定义一个工厂类,根据传入的参数不同返回不同的实例,被创建的实例具有共同的父类或接口。 场景 简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心。总结一下就是: 需要创建的对象较少; 客户端不关心对象的创建过程; 优缺点 优点 实现了对责任的分割,提供了专门的工厂类用于创建对象 缺点 工厂类的职责相对过重,不易于扩展过于复杂的产品结构,不符合开闭原则(可解决) 示例 接下来我们构造一个场景来看看简单工厂模式的应用:现在手机更新换代的比较快,手机厂商每年基本都会在不同时间或者在同一时间发布生产不同型号和配置的手机。

浅谈abstractfactory抽象工厂模式

丶灬走出姿态 提交于 2019-11-30 13:04:47
一、前言 上次我们学习了Builder模式,用来组装复杂的实例,Builder就是我们盖房子的一块块砖头,钢筋和水泥,以及简单的用法,使用监工将这些元素有机的组合在了一起就能够建造整个建筑了,是监工将这些原材料按照一定的次序和特定的处理流程糅合在一起,这个过程就是组装。而现在我们学习了抽象工厂模式,将关键零件组装成产品。 在此之前,让我们对前面的几种模式做简单的回顾,首先我们学习了 迭代器模式 ,使用了工厂方法创造迭代器,并且完成了元素的内部实现和遍历的分离,因此成为“器”,也算是一种配合,其次我们学习了适配器,有类适配器和对象适配器,这两者只是实现的方式不同,本质是一样的,都是通过在原素材上加入一个适配器使得能够满足现在的需要,一般用在版本之间的兼容上使得新版本的内容能够在旧版本上使用(适配),以及一些复用的时候需要适当的修改(适配)的场合;之后我们学习了 模板模式和工厂模式 ,模板方法的一个特殊实现其实就是工厂方法,模板方法就是通过在父类之中定义职责,然后让子类实现各自的子任务,最后通过父类进行调用,提高了代码的可修改性和可扩展性,工厂方法则是在模板方法的基础上,通过生产产品的方式将框架的实现分离,遵循了高内聚低耦合的原则;在之后我们学习了 单例模式和原型模式 ,单例模式是保证全局关于某个类只有一个对象,在某些多线程或者编码误用的条件下非常重要,原型模式则是实现了对象的深浅拷贝

C#抽象

。_饼干妹妹 提交于 2019-11-30 09:32:11
抽象类概念 1有时候,基类并不与具体的事物相联系,而是只表达一种抽象的概念,用以为它的派生类提供一个公共的界面。为此,C#中引入了抽象类(abstract class)的概念。 2关键字:abstract:抽象 3由abstract修饰的类叫做抽象类,由abstract修饰的方法叫做抽象方法。 public abstract class Thing、//抽象类 { public abstract void one();//抽象方法 public abstract void two(int a, decimal b);//抽象方法 } 4如果一个类中有抽象方法,该类必须为抽象类。 5 抽象方法:一个方法如果是抽象方法,该方法必须在抽象类中。同时抽象方法只有方法的声明,没有方法实现。 抽象方法由继承抽象类的子类去实现,即如果一个类继承了抽象类,该类必须实现抽象类中的所有抽象方法。重写抽象方法用override。 public class Fish:Thing { public override void one() { //方法体 } public override void two(int a, decimal b) { //方法体 } } 6 抽象类不能实例化对象。 来源: https://blog.csdn.net/SeptemberTan/article/details

4、看源码MVC Controller如何调用Action

纵然是瞬间 提交于 2019-11-30 07:10:15
Controller继承ControllrBase,ControllerBase继承IController,而IController里只有一个Execute方法 1、ControllrBase里的Execute(),里面调用了ExecuteCore(),而ExecuteCore()是个抽象方法,抽象方法是在子类Controller里实现的 2、抽象方法ExecuteCore()是在子类Controller里实现的,而调用Action是this.ActionInvoker.InvokeAction 3、ControllerActionInvoker里的InvokeAction,而InvokeAction方法里的InvokeActionMethodWithFilters才是真正调用方法的 4、InvokeActionMethodWithFilters方法返回ActionExecutedContext 5、然后再执行InvokeActionResultWithFilters 6、InvokeActionResultWithFilters里在调用this.InvokeActionResultFilterRecursive 7、InvokeActionResult里最终会调用ExecuteResult 来源: https://www.cnblogs.com/menglin2010/p

八、Java设计模式之工厂方法

孤街醉人 提交于 2019-11-30 06:35:16
定义: 抽象工厂模式提供一个创建一系列相关或者相互依赖对象的接口 无需指定它们具体的类 类型:创建型 抽象工厂-适用场景: 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节 强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码 提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现 抽象工厂-优点: 具体产品在应用层代码隔离。无须关心创建细节 将一个系列的产品族统一到一起创建 抽象工厂-缺点: 规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂的接口 增加了系统的抽象性和理解难度 注:相同颜色表示一个产品族,相同形状的为一个产品等级结构 来源: https://my.oschina.net/u/3915790/blog/3109396