博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#基础:抽象类和抽象方法实现多态以及简单工厂设计模式的语法
阅读量:4450 次
发布时间:2019-06-07

本文共 2307 字,大约阅读时间需要 7 分钟。

首先应注意一下问题:

1,抽象方法不能有方法体;例如:public  abstract  void  Show();

2,抽象成员必须在抽象类中;

3,父类中的抽象成员子类继承以后要重写或者就是子类也是一个 抽象类

4,抽象成员不能用private的访问修饰符

5,抽象类不能被实例化(抽象类的做用就是为了让继承的)

6,抽象类中可以包含实例成员或构造函数

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

如果父类中的方法体幽默人的实现并且需要实例化那么此时用虚方法实现多态;

例如:

public   class jisuanji

    {
       public virtual void Write()
       {
           Console.WriteLine("xie");//虚方法
       }
       public virtual  void Read()
       {
           Console.WriteLine("du");//虚方法
       }
    }
   class Upan : jisuanji
   {
       public override void Write()
       {
           Console.WriteLine("upan的写");//重写虚方法
       }
       public override void Read()
       {
           Console.WriteLine("upan");
       }
    
       }

如果父类中的方法体没有默认的实现并且不需要实例化那么此时可以定义为抽象类通过抽象类来实现多态;

例如:

 public abstract  class jisuanji   

  {    

    public abstract void Write();//这里是抽象方法

       public abstract void Read();       

                 }  

  class Upan : jisuanji   //子类继承父类但子类是普通类不是抽象类所以要把父类里面所有的抽象成员重写

{       

public override void Write()    

    {          

  Console.WriteLine("upan的写");   //重写父类中的抽象方法

     }       

public override void Read()        {     

       Console.WriteLine("upan");

       }            

}

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

new关键字

如果父类中的一个方法在子类中加关键字new 就是全新的重写了这个方法同是把从父类中继承的这个方法给隐藏了

例如:

 public   class jisuanji

    {
       public  void Write()
       {
           Console.WriteLine("xie");
       }
     
    }
   class Upan : jisuanji
   {
       public new void Write()//此时就是把父类中的Write方法给隐藏了在主函数中调用子类的方法就是这个而继承的那个方法就被给隐藏了
       {
           Console.WriteLine("upan的写");
       }

}

——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

简单工厂的设计模式

例如:

 public  abstract  class jisuanji//抽象类

    {
       public abstract void Write();//抽象方法
    }
   class Upan : jisuanji//继承抽象类
   {
       public override  void Write()
       {
           Console.WriteLine("upan的写");//重写方法
       }

}

 class Program

    {
        static void Main(string[] args)
        {
            Console.WriteLine("输入内容");
            string str = Console.ReadLine();
            jisuanji p= Show(str);//参数传进简单工厂的方法中返回的是父类类型的对象
            p.Write();//这里就是多态调用子类中的方法
            Console.ReadKey();
        }
        static jisuanji Show(string str)//简单工厂返回的是父类的类型
        {
            jisuanji p = null;//抽象类不能实例化因此把null给它
            switch (str)
            {
                case "upan"://case的值为upan的时候执行下面
                    p=new Upan();//这是子类的一个实例化对象
                    break;
            }
            return p;//返回的是子类的实例化对象子类可以隐式转换成父类
        }
    }

 

 

 

 

转载于:https://www.cnblogs.com/lixiang0829/archive/2012/08/09/2630811.html

你可能感兴趣的文章
union的用法
查看>>
nginx安装的一些问题
查看>>
php知识必备
查看>>
首次接触 ef
查看>>
ubuntu install rpm package
查看>>
x1 carbon 扩展屏 模糊
查看>>
Android 内存泄漏
查看>>
这两天的总结0829
查看>>
DISCUZ 更改群组发帖系统提醒成员 notification_add 发送通知提示函数
查看>>
数组作为函数参数
查看>>
批处理精灵节点
查看>>
oc set/get方法
查看>>
缓存理解
查看>>
Maven搭建简单的SPring+SpringMVC+Hibernate框架
查看>>
node fs模块
查看>>
Mybatis 获取插入记录的自增长ID
查看>>
Android学习第三天--spiner(下拉列表)
查看>>
php微信开发之带参数二维码的使用
查看>>
WorkStation 虚拟机迁移到 ESXi
查看>>
Java throw throws try...catch区别
查看>>