zoukankan      html  css  js  c++  java
  • 抽象与接口

    抽象
    什么是抽象,抽象就相当于一个非实体的描述。也就是说抽象不可以实例化,但是可以被继承,抽象类中可以包含实现,但是只要没有实现那么这个类必须规定为抽象类。

    .NET 2.0面向对象编程揭秘 中它是这样被描述的。
    抽象中有抽象类,抽象方法,抽象属性。
    1、抽象方法
        呵呵,我更喜欢先说抽象方法,因为有抽象发放抽象类才能存在,当然不是说所有的抽象类里面都必须有抽象方法。我们尝试先去理解抽象类,至于说为什么这么写我在后面说就是了,那么怎么写呢。抽象方法既然为抽象,那么就不包含任何的实现内容。
        普通类里面我们写print方法是这么写的
        
    public void print()
    {
       
    return "this is printing now";
    }

        而抽象类中的print方法呢,自然她没有实现,哪么我们就应该这么写
     
    public abstract void print();
        我们先不管它到底是为了什么我们先将她这么写就是了。
    2、抽象属性
        抽象属性和抽象方法的基本原理应该是一致的,都是没有任何实现的。
        在普通里面我们这么写我们的一个属性
        
    public string Name
    {
       
    get{return name;}
       
    set{name=value;}
    }
        而在我们的抽象属性中我们不需要包含任何实现,就可以这么写
    public abstract string Name
    {
       
    get;
       
    set;
    }

    好了到此,我们都稀里糊涂的看到了上面的抽象方法,和抽象属性,那么我们可以来描述一下抽象类了,在抽象类中我们表现出了极大的容忍和包容,呵呵。我们将所有的抽象方法和抽象属性都包含到这个抽象类中
    3、抽象类
    我们将上面的抽象方法和抽象属性都包含进我们的抽象类
    abstract class aclass
    {
       
    public abstract print();
       
    public abstract string Name
       {
            
    get;
            
    set;
       }
    }

    抽象类一般表示为基类,她的基本作用就是让后面的子系继承的,而抽象方法和抽象属性可以在子系里面进行详细的实现。
    中国人喜欢为每件存在的事物寻找一个理由,那么为什么要用抽象呢,这个我还没有研究到那么深刻,目前处于学习阶段,我只知道她的存在必定有她存在的道理。
    好了下面我们稍微使用一个小小的例子来描述一下具体是怎么用抽象类的呢抽象类的呢
    abstract class Fruit    //抽象类

    {
        
    public abstract String Message   //抽象属性

        
    {

            
    get;

            
    set;

        }



        
    public abstract void GrowInArea(); //抽象方法

    }


    class Apple : Fruit //苹果

    {
        
    private String _msg;

        
    public override  String Message

        
    {

            
    get

            
    {

                
    return _msg;

            }


            
    set

            
    {

                _msg
    =value;

            }


        }



        
    public override void GrowInArea()

        
    {

            Console.WriteLine(
    "南方北方都可以种植我。");

        }


    }


    class Pineapple : Fruit //菠萝

    {
        
    private String _msg;

        
    public override  String Message

        
    {

            
    get

            
    {

                
    return _msg;

            }


            
    set

            
    {

                _msg
    =value;

            }


        }



        
    public override void GrowInArea()

        
    {

            Console.WriteLine(
    "我喜欢温暖,只能在南方看到我。");

        }


    }


    好了  。哪么我们怎么使用这个抽象类中的内容的呢 。这个看下面:
    Fruit f;

    = new Apple();

    f.Message
    ="Apple";

    f.GrowInArea();

    = new Pineapple();

    f.Message
    ="Pineapple";

    f.GrowInArea();




    接口
    什么是接口呢。。。我第一次听老师讲解到这个内容的时候也是稀里糊涂的,根本不知道那东西是干嘛的。每个东西的存在都有她的必要性,而我们的接口呢,当时根本没有什么程序要用到接口,也没什么太在意,但是现在程序越来越大的时候,不规范的代码到处都是,就想到有没有什么其他方法,为我们规定比较好的编程方式呢。于是我学习了接口。
    现在才理解接口,就是对外提供的模型,你所实现的内容对着这个模型做就好了。
    我们首先示例一个简单的接口

    public interface Icall
    {
       
    void call();
    }


    在.net2.0面向对象编程揭秘书中说。接口是一个纯正的抽象类,也就是说,相当与一个抽象类中没有任何实现,她所有的方法都是抽象方法。而我们要实现她的时候就是继承,然后重写,而这里的重写我们不需要添加OVERRIDE关键字,只因为它是接口,就是将方法放在那里给你重写的,你不写还就不行了。(不遵守我的标准就别使用我的接口,就这么简单,是不是很霸道,呵呵,事实就是如此,没有规矩不成方圆么)
    那么我们现在来实现这个接口的一个新的类看哈子、
    public class mycall:Icall
    {
       
    public void call()
       
    {
           Console.WriteLine(
    "电话来了,接电话了!");
       }

    }


    而我们怎样去调用这个方法呢 。
    mycall m_mycall=new mycall;
    m_mycall.call();
    这样就可以了。
  • 相关阅读:
    网址大全
    HTTPS的页面发送不了HTTP请求?——关于混合内容
    Prometheus node_exporter grafana部署安装
    seafile部署安装
    vnc服务器和windows2012密钥
    【转】缓存淘汰算法系列之3——FIFO类
    【转】缓存淘汰算法系列之2——LFU类
    【转】缓存淘汰算法系列之1——LRU类
    【转】缓存、缓存算法和缓存框架简介
    【转】Sizeof与Strlen的区别与联系
  • 原文地址:https://www.cnblogs.com/itgmhujia/p/1154572.html
Copyright © 2011-2022 走看看