抽象方法与虚方法
面向对象分析与设计简答题

1、什么面向对象?面向对象不仅是以些具体的软件开发技术与策略,而且以一套关于如何看待软件系统与现实世界的关系,以什么观点来研究问题并进行求解,以及如何进行系统构造的软件方法学。
2、软件开发方法学的基本方法有哪些?1)软件工程和瀑布方法学2)新方法学:螺旋式、迭代式、递增式、合并式3)面向对象方法学:UML、RUP、XP3、为什么需要OOA OOD00A就是运用面向对象的方法进行需求分析,00A加强了对问题域和系统责任的理解,有利于人员之间的交流,对需求变化的适应性较强,很好的支持软件复用。
00D就是运用面向对象的方法进行系统设计,00D •符合人们习惯的思维方法,便于分解大型的复杂多变的问题;易于软件的维护和功能的增减;可重用性好;与可视化技术相结合,改善了工作界面。
4、从概念层次、规格层次、实现层次三个角度如何理解对象的概念?从概念层次来看,一个对象就是一系列的责任;从规格层次来看,一个对象是一系列可以被其他对象或该对象自己调用的方法;从实现层次来看,一个对象是一些代码和数据。
5、如何绘制类图和对象图?简述其步骤。
类图绘制:1发现类,找到备选类,确定候选类2关联分析,确定关联关系,多重性分析3职责分析4限定与修改,导航性分析,约束,限定符;对象图绘制:1发现类和对象2对其细化,分析,确定关系。
6、简述重定义方法与重载的区别。
重定义:1参数列表必须完全与被重写的方法相同2返回类型必须一直域被重写的方法的类型相同3访问修饰符的限制一定要大于被重写方法的访问修饰符4重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查性异常:重载:1必须有不同参数列表2可以有不同的返回类型,只要参数列表不同即可3可有不同访问修饰符4可抛出不同的异常。
7、简述抽象方法与虚方法的联系与区别虚方法有一个实现部分可以为子类实现有共同的方法,并为派生提供了覆盖该方法的选,抽象方法只是强制派生覆盖方法;抽象方法只能在抽象类中声明,而虚方法不是;抽象方法不能声明方法实体,虚方法可以;包含抽象方法的类不能实例化,但虚方法可以。
C#中Abstract与Virtual的区别和联系

C#中Abstract与Virtual的区别和联系一:联系、1 Virtual和Abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义注:如果用来修饰方法,前面必须添加public,要不然就会出现编译错误!原因:虚拟方法或抽象方法是不能私有的。
毕竟加上Virtual或Abstract就是让子类重新定义的,而private成员是不能被子类访问的二:区别1 Virtual修饰的方法必须有实现(没有内容,可以用一对空的大括号),即便它是在Abstract类中定义的方法,而Abstract修饰的方法一定不能实现。
2 Abstract方法只能在抽象类中声明,Virtual方法则不一定。
例如:public class Base1{public virtual void fun1 (){Console.WriteLine("A"); // virtual修饰的方法必须有实现}}public abstract class Base2{public abstract void fun2 (); // abstract 修饰的方法一定不能实现// 且只能在抽象类中声明public virtual void fun3 () {…}// abstract类中定义的virtual方法法必// 须有实现}3 无法创建Abstract类的实例,只能被继承无法实例化。
例如:Base2 base = new Base2(); //错误! 无法创建Abstract类的实例4 Virtual方法可以实现多态,而Abstract方法不可以5 Virtual的使用会有两种情况:情况1:在基类中定义了Virtual方法,但在派生类中没有重写该虚方法。
那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。
情况2:在基类中定义了Virtual方法,然后在派生类中使用override重写该方法。
那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。
C#中Abstract、Virtual和Override的使用及区别

C#中Abstract、Virtual和Override的使⽤及区别1. abstract 修饰符指⽰所修饰的内容缺少实现或未完全实现。
abstract修饰符可⽤于类、⽅法、属性、索引器和事件。
在类声明中使⽤abstract修饰符以指⽰某个类只能是其他类的基类。
标记为抽象或包含在抽象类中的成员必须通过从抽象类派⽣的类来实现。
(1)抽象类具有以下特性:1) 抽象类不能实例化。
2) 抽象类可以包含抽象⽅法和抽象访问器。
3) 不能⽤sealed修饰符修饰抽象类,因为这两个修饰符的含义是相反的。
采⽤sealed修饰符的类⽆法继承,⽽abstract修饰符要求对类进⾏继承。
4) 从抽象类派⽣的⾮抽象类必须包括继承的所有抽象⽅法和抽象访问器的实际实现。
5) 在⽅法或属性声明中使⽤abstract修饰符以指⽰⽅法或属性不包含实现。
(2)抽象⽅法具有以下特性:1) 抽象⽅法是隐式的虚⽅法。
2) 只允许在抽象类中使⽤抽象⽅法声明。
3) 因为抽象⽅法声明不提供实际的实现,所以没有⽅法体;⽅法声明只是以⼀个分号结束,并且在签名后没有⼤括号({ })。
(3)在抽象⽅法声明中使⽤static或virtual修饰符是错误的。
除了在声明和调⽤语法上不同外,抽象属性的⾏为与抽象⽅法⼀样。
在静态属性上使⽤abstract修饰符是错误的。
在派⽣类中,通过包括使⽤override修饰符的属性声明,可以重写抽象的继承属性。
publicabstractclassparent{protectedintx=100;protectedinty = 200;publicabstractvoidfunction();publicabstractintX {get; }publicabstractintY {get; }}publicclassnewperson:parent{publicoverridevoidfunction(){x++;y++;}publicoverrideintX{get{returnx+100; }}publicoverrideintYget{returny+100; }}}staticvoidMain(string[] args){newpersonp =newnewperson();Console.WriteLine(p.X);Console.WriteLine(p.Y);p.function();Console.WriteLine(p.X);Console.WriteLine(p.Y);Console.ReadKey();}2.virtual关键字⽤于修饰⽅法、属性、索引器或事件声明,并使它们可以在派⽣类中被重写。
虚方法

this和base关键字:this可以访问当前类中定义的字段,属性和方法,有没有this都可以访问,有this可以让IDE-VS编译器给出提示,另外当方法的参数跟字段重名的时候,使用this可以表明访问的是类中的字段,base可以调用父类中的公有方法和字段,有没有base都可以访问,但是加上base.IED工具会给出提示,把所有可以调用的字段和方法罗列出来方便选择
虚方法(虚函数,也叫重写函数):把一个基类函数声明为virtual,就可以在任何派生类中重写该函数,在派生类中重写另外一个函数时,要使用override关键字显示声明。我们在子类里面重写虚函数之后,不管在哪里调用都是调用重写之后的方法
隐藏方法:如果签名(方法的参数,返回的数据类型,方法名)相同的方法在基类和派生类中都进行了声明,但是该方法没有分别声明为virtual和override,派生类就会隐藏基类方法。(要
多态的三种手段

多态的三种⼿段⽤virtual修饰的⽅法叫做虚⽅法虚⽅法可以在⼦类中通过override关键字来重写常见的虚⽅法:ToString() Equalsc#基础多态的三种⼿段多态的概念概念:让⼀个对象能够表现出多种的状态(类型)实现多态的3种⼿段:1、虚⽅法 2、抽象类 3、接⼝关于虚⽅法需要注意的⼏点:1.⽗类中如果有⽅法需要让⼦类重写,则可以将该⽅法标记为virtual2.虚⽅法在⽗类中必须有实现,哪怕是空实现。
3.虚⽅法⼦类可以重写(override),也可以不重写关于抽象⽅法注意的⼏点:1.需要⽤abstract关键字标记2.抽象⽅法不能有任何⽅法实现。
3.抽象成员必须包含在抽象类中。
4.由于抽象成员没有任何实现,所以⼦类必须将抽象成员重写。
5.抽象类不能实例化,抽象类的作⽤:抽象类的作⽤就是为了让⼦类继承。
6.抽象类中可以包括抽象成员,可以包括有具体代码的成员。
7. 还有抽象⽅法不能⽤static修饰1.接⼝中只能包含⽅法(属性、事件、索引器也都是⽅法)2.接⼝中的成员都不能有任何实现。
光说不做3.接⼝不能被实例化。
4.接⼝中的成员不能有任何访问修饰符。
(默认为public)5.实现接⼝的⼦类必须将接⼝中的所有成员全都实现。
6.⼦类实现接⼝的⽅法时,不需要任何关键字,直接实现即可。
7.接⼝存在的意义就是为了多态。
//1.虚⽅法⽤virtual修饰的⽅法叫做虚⽅法虚⽅法可以在⼦类中通过override关键字来重写常见的虚⽅法:ToString() Equals//1)、虚⽅法//步骤://1、将⽗类的⽅法标记为虚⽅法,使⽤关键字 virtual,这个函数可以被⼦类重新写⼀个遍。
public class Employee{public virtual void DaKa(){Console.WriteLine("九点打卡");}}public class Manager : Employee{public override void DaKa(){Console.WriteLine("经理11点打卡");}}public class Programmer : Employee{public override void DaKa(){Console.WriteLine("程序猿不打卡");}}//抽象类1//2)、抽象类//当⽗类中的⽅法不知道如何去实现的时候,可以考虑将⽗类写成抽象类,将⽅法写成抽象⽅法。
c#复习资料2013(带答案)(总)

11.1、公共语言运行库即( )。
A、CRLB、CLRC、CRRD、CLS1.2、.NET平台是一个新的开发框架。
( )是.NET的核心部分。
A、C#B、.NET FrameworkC、D、操作系统1.3、项目文件的扩展名是( )。
A、csprojB、csC、slnD、suo1.4、利用C#开发应用程序,通常有三种类型,不包括( ) 。
A、控制台应用程序B、Web应用程序C、SQL程序D、Windows程序1.5、运行C#程序可以通过按 ( ) 键实现A、F2B、F5C、F8D、F91.6 C#中导入某一命名空间的关键字是( )。
A. usingB. useC. includeD. import1.7 C#语言程序执行时从( )的第一行开始A、Main( )B、classC、namespaceD、using1.6、简述面向对象程序设计的特点.P21.7、简述类与对象的关系.p322.1、下列标识符不合法的是: 。
A、abcB、abc123C、abc-1D、a3b2.2、转义字符不可以表示。
A、任何字符B、字符串C、字母D、小数点2.3、从值类型转换到引用类型称为____A、继承B、拆箱C、装箱D、转换2.4、下列值类型的数据精度最高的是 ____ 。
A、intB、floatC、decimalD、ulong2.5、在C#中,下列常量定义正确的是____A 、const double PI 3.14;B、const double PI=3.14;C、 define double PI 3.14;D、define double PI=3.14;2.6在C#中定义一个数组,正确的代码为____A、int arr=new int [5];B、int [] arr=new int [5];C、int arr =new int [ ];D、int [5] arr=new int [];2.7以下类型中,不属于值类型的是____。
抽象方法(abstractmethod)和虚方法(virtualmethod),重载(ov。。。

抽象⽅法(abstractmethod)和虚⽅法(virtualmethod),重载(ov。
1. 抽象⽅法 (abstract method)在抽象类中,可以存在没有实现的⽅法,只是该⽅法必须声明为abstract抽象⽅法。
在继承此抽象类的类中,通过给⽅法加上override关键字来实现此⽅法. 由于该abstract method (抽象⽅法)是没有实现的⽅法,所以在⼦类中必须使⽤override关键字来重写此⽅法抽象⽅法不提供⾃⾝的实现,并且强制⼦类重写2. 虚⽅法 (virtual method)2.1 虚⽅法,⼦类可以选择性重写此⽅法(⽤override关键字重写),也可以不重写. 它不像抽象⽅法,⼦类必须重写(如果⼦类不重写,那么⼦类也必须是抽象类)2.2 虚⽅法可以有实体,所以可以直接调⽤public virtual void Vt(){Console.WriteLine("this is virtual method");}2.3 虚⽅法可以实现多态。
⽽抽象⽅法不可以虚⽅法提供⾃⾝的实现,并且不强制要求⼦类重写3. 重载应该叫overload, 重写叫override重载 (overload)某个⽅法是在同⼀个类中发⽣重写 (override) 就是在⼦类中重写⽗类中的⽅法3.1 重写(override)是⽤于重写基类的虚⽅法, 这样在派⽣类中提供⼀个新的⽅法⽗类: public virtual string ToString(){return "a";}⼦类 public override string ToString() {return "b";}3.2 重载(overload)是提供⼀种机制,相同函数名通过不同的返回值类型以及参数列表来区分的机制public string ToString(){return "a";}public string ToString(int id){return id.ToString();}很明显的区别---函数特征:重写(override)的两个函数的函数特征相同, 或者说有相同的函数签名重载(overload)的两个函数的函数名虽然相同,但函数特征不同 (函数特征包括函数名,返回值类型, 参数的类型和个数)。
什么是抽象方法

什么是抽象方法
在面向对象编程语言中抽象方法指一些只有方法声明,而没有具体方法体的方法。
抽象方法一般存在于抽象类或接口中。
没有具体功能的实现,通过子类继承后重写方法来实现一定约束的类称之为抽象类,抽象类必须被abstract修饰。
抽象方法就是只有方法声明,没有方法体的方法。
抽象类的使用一般通过继承来实现。
抽象类:抽象类就是不能使用new方法进行实例化的类,即没有具体实例对象的类,抽象类有点类似于“模板”的作用,目的是根据其格式来创建和修改新的类,对象不能由抽象类直接创建,只可以通过抽象类派生出新的子类,再由其子类来创建对象,当一个类被声明为抽象类时,要在这个类前面加上修饰符abstract,在抽象类中的成员方法可以包括一般方法和抽象方法。
抽象方法:抽象方法就是以abstract修饰的方法,这种方法只声明返回的数据类型,方法名称和所需要的参数,没有方法体,也就是说抽象方法只需要声明而不需要事先,当一个方法为抽象方法时,意味着这个方法必须被子类的方法所重写,否则其子类的该方法仍然是abstract的,而这个子类也必须是抽象的,即声明为abstract。
两者联系:抽象类中不一定包含抽象方法,但是包含抽象方法的类一定要被声明为抽象类,抽象类本身不具备实际的功能,只能用于派生其子类,抽象类中可以包含构造方法,但是构造方法不能被声明为抽象,抽象类不能用final来修饰,即一个类不能既是最终类又是抽象类,abstract不能与private,static,final,native 并列修饰同一个方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
抽象方法与虚方法
抽象方法和虚方法是面向对象编程中两种重要的概念。
抽象方法是指在一个类中声明但没有实现的方法,它只有方法名和参数列表,没有方法体。
抽象方法必须在抽象类中声明,而抽象类本身也必须被声明为抽象类。
抽象方法的存在是为了让子类去实现。
抽象方法的声明使用关键字"abstract"来修饰。
抽象方法的定义和实现都是在子类中完成的,子类需要重写抽象方法,并提供自己的实现。
否则,子类也必须声明为抽象类,继续由子类去实现。
当一个类继承了一个抽象类,并且没有实现抽象方法时,该子类必须是抽象类。
抽象方法不能被直接调用,只能通过子类的实例来调用。
抽象方法的主要作用是为了定义一种规范,强迫子类去实现这个方法。
它确保了子类具有某个特定的行为。
抽象方法是为了实现多态而设计的,它可以被多个不同的类所实现,并且可以在运行时根据实例的不同来调用不同的实现。
虚方法是指可以被子类重写的方法。
虚方法不同于抽象方法,它有方法体,并且在父类中已经有了默认的实现。
虚方法的关键字是"virtual"。
通过将方法声明为虚方法,可以使子类根据自己的需求来重写这个方法,而不是必须实现。
虚方法和抽象方法的本质区别在于是否有默认的实现。
抽象方法没有默认的实现,
必须由子类去实现;而虚方法有默认的实现,子类可以直接使用父类的实现,也可以选择重写。
抽象方法强制子类去实现,而虚方法是给子类提供一个可选择的实现。
另外,抽象方法必须声明在抽象类中,而虚方法可以是普通的类、抽象类或接口中的方法。
抽象方法和虚方法在实现多态的场景下都是非常重要的。
多态是面向对象编程的一项重要特性,它允许一个变量在不同情况下具有不同的类型,并且可以根据实际类型来调用相应的方法。
抽象方法和虚方法都可以被多个不同的类所实现,然后在运行时根据对象的实际类型来调用相应的实现,实现多态。
多态使得代码更加灵活,可扩展性更好。
对于抽象方法和虚方法的选择,一般来说,当需要定义一个规范,强制子类去实现某个方法时,使用抽象方法;当需要提供一个默认的实现,并允许子类根据需要选择是否重写时,使用虚方法。
综上所述,抽象方法是在抽象类中声明但没有实现的方法,必须被子类实现;虚方法是在父类中有默认实现但可以被子类重写的方法。
抽象方法和虚方法都是为了实现多态而设计的,使得代码更加灵活和可扩展。
在实际编程中,我们需要根据具体需求来选择使用抽象方法还是虚方法。