抽象类

PHP的抽象类、接口的区别和选择

眉间皱痕 提交于 2020-03-05 09:58:37
区别: 1、对接口的使用是通过关键字implements。对抽象类的使用是通过关键字extends。当然接口也可以用extends继承。 2、接口中不可以声明成员变量(包括类静态变量),但是可以声明类常量。抽象类中可以声明各种类型成员变量,实现数据的封装。(另JAVA接口中的成员变量都要声明为public static final类型) <?php abstract class Father { function meth1() { echo "meth1...<br>"; } abstract function meth2(); public $var1="var1"; public static $var2="var2"; const Var3="Var3"; } class Son extends Father { function meth2() { echo "meth2 of Son...<br>"; } } $s=new Son(); echo $s->var1."<br>"; echo Father::$var2."<br>"; echo Father::Var3."<br>"; Interface IFather { //public $iVar1="iVar1"; 此处接口定义中不能包含成员变量 //public static $iVar2="iVar2";

详解 抽象类

馋奶兔 提交于 2020-03-05 09:38:04
本人在这篇博文中要讲解的知识点,和本人之前的一篇博文有所关联。因为,“ 抽象类 ” 是按照 “ 自下而上 ” 的顺序来编写所需的类,而在本人之前的博文 《详解 继承(上)—— 工具的抽象与分层》 中讲到的 继承 则与之相反,按照 “ 自上而下 ” 的顺序来编写所需类,那么,话不多说,现在本人就开始讲解这篇博文的主题 抽象类的基本概念: 首先,本人来介绍下 什么是抽象类 : 定义 : 在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类 那么,抽象类具有如下 特点 : 特点 : 抽象类 和 抽象方法 必须用abstract关键字修饰 : 抽象类格式: abstract class 类名 {} 抽象方法格式: public abstract void eat(); 抽象类 不一定有抽象方法,有抽象方法的类 一定是抽象类 抽象类中 可以有构造方法 ,抽象类 不能进行实例化 : 问:那么要构造方法有什么作用呢? 答曰:用于子类访问父类数据时的初始化 抽象类 不能直接实例化 问:那么,抽象类如何实例化呢? 答曰:按照多态的方式,由具体的子类实例化。其实这也是 多态的一种 ,抽象类多态。 抽象类的 子类 : 要么是 抽象类 要么 重写抽象类中的所有抽象方法 本人来通过 两个例子 ,来展示这个知识点的应用: 一、图形类:

C# 多态性

烂漫一生 提交于 2020-03-05 01:29:40
多态性 意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。 多态性可以是静态的或动态的。在 静态多态性 中,函数的响应是在编译时发生的。在 动态多态性 中,函数的响应是在运行时发生的。 静态多态性 在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。分别为: 函数重载 运算符重载 运算符重载将在下一章节讨论,接下来我们将讨论函数重载。 函数重载 您可以在同一个范围内对相同的函数名有多个定义。函数的定义必须彼此不同,可以是参数列表中的参数类型不同,也可以是参数个数不同。不能重载只有返回类型不同的函数声明。 下面的实例演示了几个相同的函数 print() ,用于打印不同的数据类型: using System; namespace PolymorphismApplication { class Printdata { void print(int i) { Console.WriteLine("Printing int: {0}", i ); } void print(double f) { Console.WriteLine("Printing float: {0}" , f); } void print(string s) { Console.WriteLine("Printing string: {0}

编程语言工具和环境

此生再无相见时 提交于 2020-03-04 19:58:19
什么是python的生成器? python生成器是一个返回可以迭代对象的函数,可以被用作控制循环的迭代行为。生成器类似于返回值为数组的一个函数,这个函数可以接受参数,可以被调用,一般的函数会返回包括所有数值的数组,生成器一次只能返回一个值,这样消耗的内存将会大大减小。 yield生成器解释 Java抽象类和接口的区别? Java中,一个类可以实现多个接口,但是一个类只能继承一个抽象类。 接口中只包含接口签名,而抽象类可以提高默认实现,子类可以重载抽象类方法。 接口中默认的所有方法均为public修饰,而抽象类可以用protected修饰符。 接口中不允许定义任何属性,而抽象类中可以定义属性和常量在应用场景中。 在应用场景中使用接口来完成同一方法的不同实现,若不同的方法实现需要共享同样的行为或状态则用抽象类。 python中is和==的区别 is是用来判断两个变量引用的对象是否为同一个,==用于判断引用对象的值是否相等。可以通过id()函数查看引用对象的地址。 python方法解析顺序 Python的方法解析顺序优先级从高到低为:实例本身->类->继承类(继承关系越近,越先定义,优先级越高) 方法解析:是一种在多重继承中用于确定方法搜索顺序的算法. Ctrl+C程序挂掉还是抛出异常,如何判断两个dict是否一样,list头上删除元素,字符串拼接? Ctrl+C会挂掉程序

面向对象的软件开发方法

早过忘川 提交于 2020-03-04 15:45:31
一、了解什么是面向对象的软件开发方法 答:1、OOSD是一种把面向对象的思想应用于软件开发过程,是一种当今成熟的、普遍流行的软件开发方法 2、面向对象方法的解决思路是从现实世界中的客观对象入手,尽量运用人类的自然思维方式来构造软件系统。是一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。 3、面向对象方法中,把一切都看成是对象。对象是功能抽象和数据抽象的统一,较过程稳定。 二、面向对象软件开发的主要思想 答:1、按照人类的自然思维的方式,对客观世界建立软件模型。 2、客观实体和实体之间的联系构成了现实世界的所有问题。 3、面向对象技术将现实世界中的实体及相互关系映射为对象及对象间的关系,实体间的相互作用被映射为对象间的消息发送等。 三、面向对象方法的主要优点 答:(1)把易变的数据结构和部分功能封装在对象内并加以隐藏 i、保证了对象行为的可靠性。 ii、对其修改并不会影响其它对象,有利于维护,对需求变化有较强的适应。 (2)封装性和继承性有利于复用对象 i、把对象的属性和操作捆绑在一起,提高了对象(作为模块)的内聚性,减少了与其它对象的耦合,为复用对象提供了可能性和方便性。(高内聚,低耦合) ii、在继承结构中,特殊类对一般类的继承,本身就是对一般类的属性和操作的复用。 四、面向对象开发方法的组成 答:(1)OOA(Object-Oriented

java集合

眉间皱痕 提交于 2020-03-04 15:40:53
java集合首先可以分为List、Set、Map这三种体系 Set:无序、不可重复的集合 List:有序、重复的集合 Map:代表具有映射关系的集合 注:java5以后又出现了queue体系集合,代表一种队列集合实现 **集合和数组的区别:**数组的元素可以是基本数据类型的值也可以是对象,而集合里只能保存对象 1.Iterator遍历元素: a)boolean hashNext():如果被迭代的集合元素还没有被遍历,则返回true b)Object next():返回集合里的下一个元素 c)void remove():删除集合里上一次next()方法返回的元素 一、HashSet 1.HashSet特点: a)不能保证元素的排列顺序 b)HashSet是不同步的,如果多个线程同时访问一个HashSet,必须要保证同步 c)集合元素值可以是null 2.HashSet用hashCode和equals方法来判断两个对象是不是同一个对象 hash算法是根据元素的值来计算出该元素的存储位置,而HashSet是通过每个元素的hashcode值来计算索引,从而可以自由增加HashSet的长度,并且可以根据元素的哈市Code值来访问元素,实际上HashSet是HashMap的一个实现类HashSet中的元素都存放在HashMap的key上面。 3.HashSet的底层实现

JAVA入门-抽象类

家住魔仙堡 提交于 2020-03-04 12:38:06
抽象类 什么是抽象类? 1.在java的面向对象的概念中,所有的对象都是通过类来描绘的。 2.不是所有的类都是用来描绘对象的。 3.如果一个类中没有足够的信息来描绘一个具体的对象,那他就是抽象类。 核心 1.抽象类不能实例化对象,抽象类必须被继承。(抽象类一旦实例化就会报错,编译无法通过) 举例 – 抽象类 public abstract class Test { private String name ; private String address ; private int number ; public abstract boolean try ( ) ; public void Speak ( ) { System . out . println ( "我是 " + this . name + "我家住在" + this . address ) ; } } –抽象类实例化 public class Testone { public static void main ( String [ ] args ) { /* 以下是不允许的,会引发错误 */ Test a = new Test ( "邹运" , "黄土高坡" , 10 ) ; a . Speak ( ) ; } } –报错 Test . java : 46 : Test is abstract ; cannot be

理解Abstract class和Interface

随声附和 提交于 2020-03-04 10:10:47
前言 在Java中, 实现 抽象的机制有2种 : 抽象类(abstract class) 和 接口(Interface) 二者非常类似,甚至可相互替换,因此很多开发者开发时对于二者的选择十分随意。其实,2者之间存在很大区别 本文将对抽象类( abstract class )、接口( Interface ) 之间的区别 进行详细 讲解剖析 抽象是什么 抽象就是忽略与当前目标无关的相关方面,以便更充分地突出与当前目标有关的方面。 抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节 。 抽象体(即被Abstract和Interface定义的抽象事物)在实际编程中定义一类行为,却不对其做实际的描述, 在继承或者实现中才涉及到具体的实现 ,也就是说, 抽象体隐藏了具体的实现,而仅仅提供统一的接口,在实际实现中可以根据需要进行实现或者扩展。这符合面向对象设计原则中的"对修改封闭,对扩展开放"的原则 。 语法和实践上的区别 抽象类主要是类对象的抽象集合 抽象方法主要是类方法的抽象集合 Abstract Class Interface 实例化 不能 不能 类 是一种继承关系,一个类智能使用一次继承关系。 可以通过继承多个接口实现多重继承 一个类可以实现多个接口 数据成员 可以有自己的 必须是默认的static final 方法成员 可以有私有方法,有非abstract方法

C#:桥接模式

邮差的信 提交于 2020-03-03 18:18:50
转自原文 C#: 桥接模式 1.引言 桥接模式是一种很实用的结构型设计模式,如果系统中的某各类存在两个独立变化的纬度,通过桥接模式可以将这两个纬度分离出来,它是将抽象部分和实现部分解耦,使得两者都能够独立变化。如果不理解,怎么说都会觉得晦涩,看下面的两个例子: (1)示例1【 桥接模式 】 把遥控器做为一个抽象类,抽象类中提供遥控器的所有实现,其他具体电视品牌的遥控器都继承这个抽象类,具体设计类图如下: 这样的实现使得每部不同型号的电视都有自己遥控器实现,这样的设计对于电视机的改变可以很好地应对,只需要添加一个派生类就搞定了,但随着时间的推移,用户需要改变遥控器的功能,如:用户可能后面需要对遥控器添加返回上一个台等功能时,此时上面的设计就需要修改抽象类RemoteControl的提供的接口了,此时可能只需要向抽象类中添加一个方法就可以解决了,但是这样带来的问题是我们改变了抽象的实现,如果用户需要同时改变电视机品型号和遥控器功能时,上面的设计就会导致相当大的修改,显然这样的设计并不是好的设计。 (2)示例2 画笔有毛笔和蜡笔两种,假如需要大、中、小3种型号的画笔,能够分别绘制出12种不同的颜色,如果使用蜡笔的话需要准备36支,如果使用毛笔,则只需要准备3种型号的毛笔外加12种颜色的调色板,总共15样。如果需要新增一种新型号的画笔,对于蜡笔来说需要增加12支

接口类、抽象类和类的区别

霸气de小男生 提交于 2020-03-03 16:52:36
设计层面: 抽象类 是多个子类公共特征的抽象,可以想象成基因图谱。比如猴子的子类有金丝猴、长尾猴等。抽象类是子类的模板。所以抽象类只支持单继承。 接口类 是行为的抽象,这种行为可以跨物种。比如麻雀、蝴蝶、风筝都能实现“飞:这个行为。所以可以理解接口是支持 多重继承 的,也是实现 多态 的基础,所以它的方法是抽象的,不需要实现。 接口 抽象类 普通类 变量 public static final 方法 public、抽象方法,不能实现 不限 不支持抽象方法 实例化 否 多重继承 支持 Java8增加了函数式编程的支持,所以增加了functional inteface,它是只有一个抽象方法的接口,用@FunctionalInterfaceAnnotation来标记。Runnable、Callable之类,都是functional interface。 另外,Java8后,interface增加了对default method的支持。 接口里的方法不一定非要写上public abstract,在编译之后生成 class 文件时,会自动加上。 //编译前 public interface AAA { void aaa(); } //编译后 public abstract interface AAA { public abstract void aaa(); } 来源: https:/