抽象方法和虚方法 与设计模式
来源:互联网 发布:不要钱的恋爱软件 编辑:程序博客网 时间:2024/06/09 18:17
一、概念
抽象方法和虚方法是什么?先写一段代码看看他们俩的区别。
抽象方法使用abstract关键字;虚方法使用virtaul关键字。
<span style="font-size:18px;">//抽象方法Public abstract class TestPaper{Public abstract Answer();}</span>
<span style="font-size:18px;">//虚方法Public class TestPaper{Public virtual Answer(){}}</span>
二、区别
通过这个非常小的例子明白两个方法的区别有:抽象方法:
1、只容许在抽象类中使用抽象方法声明;
2、abstract修饰符可以和类、方法、属性、索引器及事件一起使用;
3、抽象方法声明不提供实际的实现,所以没有方法体;
4、抽象方法声明中使用static或virtual修饰符是错误的;
虚方法:
1、虚方法声明的时候必须有实现部分,子类可以重写逻辑也可以继续使用虚方法的逻辑;
2、virtual关键字用于修饰方法、属性、索引器或事件声明;
两种方法相同之处有:都可以实现多态,具体例子看下面的两个模式。重写他们的时候都是用override。
三、设计模式
模板方法模式:
Class Testpaper{Public void TestQuestion1(){Console.WriteLine("杨过给郭靖连成屠龙刀和倚天剑的玄铁是()a、球磨铸铁 b、马口铁 c、合金钢 d、纳米纤维");Console.WriteLine("答案:"+Answer1());}Public virtual string Answer1(){//虚方法具有逻辑结构Return "";}}
Class StudentA:TestPaper{Public override string Answer1(){//重写虚方法Return "a";}}
Static void main(string[] args){Console.WriteLine("学生甲的试卷:");TestPaper StuA =new StudnetA();//利用多态实现了代码的复用StuA.TestQuestion1();Console.read();}
观察者模式:
Abstract class Subject{Private Ilist<Observer> observer=new List<Observer>();//利用泛型,收集所有观察者Public void Attach(Observer ovserver){//添加观察者Observer.Add(observer);}Public void Detach(Observer observer){//移除观察者Observer.Remove(observer);}Public void Notify(){Foreach(Observer o in observers)//调用了这个方法的对象会被通知到修改状态{o.Update();}}}
Abstract class observer{Public abstract void Update(); //抽象方法}Class ConcreteSubject:Subject{Private string subjectState;Public string SubjectState{get{return subjectState;}Set{subjectState=value;}}}
Class ConcreteObserver:Observer{Private string name;Private string observerState;Private ConcreteSubject subject;Public concreteObserver( ConcreteSubject subject ,string name){This.subject=subject;This.name=name;}Public override void Update() //重写方法{observerState=subject.SubjectState;Console.WriteLine("观察者{0}的新状态是{1}",name,observerState);}Public ConcreteSubject subject{get{return subject;}Set{subject=value;}}}
Static void Main(string[] args){ConcreteSubject s =new ConcreteSubject();s.Attch(new ConcreteObserver(s,"X"));s.subjectState="ABC";s.Notify();Console.read();}
总结:抽象方法本身不是真实的方法体,如果不在子类中实现这个方法,就可当他不存在,而且只能在抽象类中声明这个方法;而虚方法则不是,它可以有自己的逻辑结构,子类可以选择覆盖或者直接使用父类的方法
1 0
- 抽象方法和虚方法 与设计模式
- 设计模式:工厂方法和抽象工厂
- 设计模式基础——抽象类、抽象方法、接口与虚方法
- 【设计模式】简单工厂模式、工厂方法模式和抽象工厂模式区别与联系
- 设计模式之工厂方法模式与抽象工厂模式
- 设计模式之工厂方法模式与抽象工厂模式
- Java设计模式-工厂方法模式和抽象工厂模式
- Android设计模式---工厂方法模式和抽象工厂模式
- 设计模式之工厂方法模式和抽象工厂模式
- 设计模式-工厂方法和抽象工厂方法
- 设计模式:工厂方法与抽象工厂模式
- 设计模式-抽象工厂方法
- java设计模式---工厂方法和抽象工厂模式
- 设计模式-3-工厂方法和抽象工厂模式
- 抽象类与接口与模板方法设计模式
- 抽象类和接口 与 抽象方法和虚方法
- 设计模式之静态工厂、工厂方法和抽象工厂的联系与区别
- “设计模式”学习之一:工厂方法与抽象工厂
- java jdbc 连接hive cdh4.2 hiveserver2
- ShareSDK错误问题
- 从const char *中获取指定char *字符串
- IOS常用第三方框架 --- CMPopTipView 提示信息
- 关于limit hashlimit资料整理
- 抽象方法和虚方法 与设计模式
- 重要sql 语句
- Cursor Loop
- C语言union(联合体 共用体)
- sqlplus:error while loading shared libraries:/u01/app/oracle/product/11.2.0/db_1/lib/libcIntsh.so.11
- 乱七八糟
- Android第九天
- 从白宫遭袭击事件看APT攻击
- 李明杰老师关于计算整个文件夹的代码行数练习