抽象类

C# 面试常见问题

寵の児 提交于 2021-02-18 18:32:01
Q:接口与抽象类的区别(所有公司都问,关键是我基本上都说不全,翻了个最简单好记的答案共享) 按三点答:先答属性:抽象类可以有普通成员变量,接口不行; 然后答方法:抽象类有非抽象的方法和构造方法,并且修饰符可以是私有的,接口只能是抽象的方法,并且修饰符是public,最后说一句只能继承一个抽象类,但能实现多个接口。 Q:ADO.NET的特点,几个对象都是用来干啥的 Q:asp.net页面传值有哪些方式 Q:转发和重定向有什么不同 Q:IIS6和IIS7是怎么工作的?他们有什么不同 Q: 存储过程有什么优势 A: 存储过程是放在数据库服务器上的,最直观的就是在执行sql的时候不需要网络传输sql语句只要传输 需要执行的数据就好.存储过程是预编译的普通sql执行需到数据库中进行检查sql是否正确然后再进行编译,执行效率比普通sql高。 Q:union union all的区别 A: union 把两个表之间的数据放到一起并进行排序,去重复.union all 把两个表的数据放到一起不排序不去重。 Q:数据库删除数据有哪些方法?使用哪些命令,都有哪些效果? A:可以通过DROP TRUNCATE 以及DELETE进行数据的删除,DROP 可以删除数据库和表(整个结构),TRUNCATE在不带条件时与DELETE类似 二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE

iOS的归档(archive)和解档(unarchive)

生来就可爱ヽ(ⅴ<●) 提交于 2020-04-07 07:23:56
在面向对象的编程中,会涉及到对象的保存,对象的保存在JAVA当中称之为serialize,也叫序列化。而在cocoa当中,这个过程称之为归档。cocoa当中最最典型的序列化例子就是NIB文件的保存和读取过程。 在cocoa当中如何实现了这个功能的哪? 其实在cocoa当中是通过了NSCoding协议和NSCoder抽象类共同实现的,对于NSCoder抽象类而言,其实他只是一个抽象类,是不能实例化使用的,而真正使用的是NSCoder的子类,即NSArchiver , NSUnarchiver , NSKeyedArchiver , NSKeyedUnarchiver类的实例对象。 那么实现的关键点有两点: 1、要使的需要存储的对象实现NSCoding协议,从而使他自己满足写二进制数据的能力。即是自己具有序列化的能力。 2、使用NSCoder的子类方法,实现二进制数据的动作,如读或者写。即触发存档过程。 需要注意的一点就是说,其实对于序列化,是一个“一传十,十传百”的过程,父类的序列化,会逐层递归的将所有的子对象也进行了序列化。此外,序列化,能够序列化的是对象实例和类名,而对于方法其实是无法序列化的,因此对于序列化和非序列化的类,都需要使用共同的类定义,否则无法还原。 NSCoding协议的方法: -(id)initWithCoder:(NSCoder *)coder; //

虚方法,抽象类,重写

徘徊边缘 提交于 2020-04-07 05:28:05
abstract可以修饰classes、methods、properties、indexers和events。如果某个class的声明被abstract修饰,那么就表示这个class用来做为父类的,是要被其他class继承的。如果某个class的成员被修饰为abstract,或者这个class被abstract修饰,那么继承这个class的class必须实现这些成员。 被abstract修饰的class有以下特点: 1、abstract class不能被实例化。 2、abstract class可以包含0个或多个abstract成员。 3、abstract的成员方法,只有成员声明 + “;”,没有方法体。 4、abstract的方法将在非abstract的子类中实现。 5、被abstract修饰的方法不可以再被virtual和static修饰。 6、properties已经被static修饰,它不可以再被abstract修饰。 7、abstract成员可以在子类中通过override修饰符被重写。 如果abstract class继承了接口,就需要把接口中所有的方法实现或者映射成abstract方法。 virtual virtual 关键字用于修改方法或属性的声明,在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。 调用虚方法时

C#抽象类、抽象方法、虚方法

我的梦境 提交于 2020-04-07 03:39:46
定义抽象类和抽象方法:   abstract 抽象类特点:   1、不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例   2、一个抽象类可以包含抽象和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现所有的的基类抽象方法   3、通过声明派生类也为抽象,我们可以避免所有或特定的虚方法的实现,这就是抽象类的部分实现   4、一个抽象类能够继承另一个非抽象类,另外,继承了基类的方法,添加新的抽象和非抽象方法是可行的   5、 一个抽象类也能从一个接口来实现,这种情况,我们必须为所有的方法提供方法体,这些方法是来自接口   6、一个抽象类必须为所有的接口成员提供实现,一个用于实现接口的抽象类可能把接口方法安排到抽象方法上 抽象方法特点:   1、abstract关键字只能用在 抽象类 中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现   2、一个抽象方法可以看作是一个虚函数,抽象方法的声明只能在抽象类中   3、抽象方法声明只提供一个无实现的方式,没有方法体   4、方法体的实现被覆写方法提供,覆写方法是一个非抽象类的成员   5、抽象属性的行为和抽象方法相像,除了不同的声明形式   6、在一个静态属性中使用abstract 是一个错误   7、一个抽象属性能够通过派生类使用 override

.Net学习 第2季07 C#面向对象 多态

爷,独闯天下 提交于 2020-04-07 01:59:21
.Net 视频学习第2季 C#面向对象 面向对象 多态 概念:让一个(父类)对象表现出多种(子类)类型的特性;三种方法:虚方法/抽象类/接口 方法一:虚方法 将父类方法标记为虚方法,使用关键字virtual在返回值类型前,这个方法可以被子类重写一遍(在子类方法返回值类型前使用关键字override) 没有使用虚方法下: public class Person { private string _name; public string Name { get{return _name;}     set{_name = value;} } public Person(string name) { this.Name = name; } public void SayHello() { Console.WriteLine("I am a person"); } } public class Chinese:Person { public Chinese(string name):base(name) { } public void SayHello() { Console.WriteLine("I am Chinese"); } } public class Japanese:Person { public Japanese(string name):base(name) { }

Java—面向对象编程

孤街浪徒 提交于 2020-04-06 23:21:32
一、继承 我们在创建一些类时,会发现他们之间存在相同的属性和方法,如设计一个动物表示类: 像这样的代码就存在了大量的冗余代码,仔细分析会发现这三个类有相同的eat方法和相同的name属性。从逻辑上分析,Cat和Bird都是Animal,我们就可以让两者继承Animal类,这样Animal就是被继承的类,也叫父类,基类或者超类,而Bird和Cat叫子类或者派生类。他们之间就构成了继承关系。 继承的语法规则: 1.继承使用extends指定父类。 2.在Java中,一个子类只能继承一个父类。 3.子类会继承父类所有public的方法和字段,而对于父类中所有private的方法和字段是无法访问的。 4.子类可以用super关键字得到父类实例的引用。 上面的代码使用继承改编后如下: 通过上述代码我们可以看出继承可以使代码达到重用的效果。 但如果把name改成private时,子类就无法访问父类。 如图: 但是如果使用public就违背了oop语言三大特性之一:封装,所以把字段改为protected是最佳的解决办法。看如下代码 分析上述代码报错的原因可以知道其他包中的类,对于protected修饰的字段和方法不可以访问,对于类的调用者来说,protected修饰的字段和方法也是不可以访问的。 此外,如果用final关键字修饰类,这个类也是不能被继承的。看如下代码: 二、组合 和继承类似

4,建造者模式

♀尐吖头ヾ 提交于 2020-04-06 11:53:28
一,什么是建造者模式 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种。Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。 二,例子 四个要素 产品类 :一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。 抽象建造者 :引入抽象建造者的目的,是为了将建造的具体过程交与它的子类来实现。这样更容易扩展。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。 具体建造者 :实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。 导演类 :负责调用适当的建造者来组建产品,导演类一般不与产品类发生依赖关系,与导演类直接交互的是建造者类。一般来说,导演类被用来封装程序中易变的部分。 具体产品类 House : /** * * @类名称:House * @类描述:具体产品 * @创建人:zender */ public class House { // 地板 private String floor; // 墙 private String

Java中的抽象类

自古美人都是妖i 提交于 2020-04-06 03:22:15
用abstract修饰的类叫做抽象类。 一、abstract修饰符: abstract修饰的类为抽象类,此类不能有对象,(无法对此类进行实例化,说白了就是不能new); abstract修饰的方法为抽象方法,此方法不能有方法体(不能有{}); 二、关于抽象类的使用特点: 抽象类不能有对象,(不能用new此关键字来创建抽象类的对象); 有抽象方法的类一定是抽象类,但是抽象类中不一定有抽象方法; 抽象类中的抽象方法必须在子类中被重写。 来源: https://www.cnblogs.com/Water2Wine/p/12640352.html

Java Abstract class and Interface

寵の児 提交于 2020-04-04 08:44:43
(一)概述 在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存 在,才赋予了Java强大的 面向对象能力。abstract class和interface之间在对于抽象类定义的支持方面具有 很大的相似性,甚至可以相互替换,因此很多开发者在进 行抽象类定义时对于abstract class和interface的 选择显得比较随意。其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对 于问题领域本质的理 解、对于设计意图的理解是否正确、合理。   abstract class和interface在Java语言中都是用来进行抽象类(本文 中的抽象类并非从abstract class 翻译而来,它表示的是一个抽象体,而abstract class为Java语言中用于定义抽象类的一种方法, 请读者注意 区分)定义的,那么什么是抽象类,使用抽象类能为我们带来什么好处呢?   在 面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是 所有 的类都是用来描绘对象的(把类具体化),如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的 类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念,是对一系列看上去 不同,但是本质上相同的具体概念的抽象。比如