sduzgz

虚函数,多态,抽象类,接口别人的经验

抽象类:

不能实例化。

可以在抽象类中定义抽象方法,以供派生类写具体方法。

派生类也可以保留抽象方法,但该类必须为抽象类。

也可以在抽象类中写非抽象方法。

例子:

抽象类

public abstract class AbstractClass
{
    public abstract string GetName(string Name);

    public string GetNameByID(string Name)
    {
        return Name;
    }
}

派生类

public class UserClass:AbstractClass
{
    public override string GetName(string Name)
    {
        return Name + "nihao.";
    }
}

 

虚方法:

通过在基类中定义虚方法(virtual),在子类中,可以通过override进行派生重写。

例子

基类

public class VirtualClass
{
    public virtual string GetName(string Name)
    {
        return Name;
    }
}

子类

public class UserClass2:VirtualClass
{
    public override string GetName(string Name)
    {
        //return base.GetName(Name);
        return "Hello." + Name;
    }
}

 

接口:

接口即契约。用于规定一种规则由大家遵守。允许多继承.而继承类只允许单继承.

定义接口

public interface UserInterface
{
    void UserLogin(string UserName,string Password);
    bool Login(out string exInfo);
}

使用接口

public class UserClass : UserInterface
{
    #region UserInterface 成员

    public void UserLogin(string UserName, string Password)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    public bool Login(out string exInfo)
    {
        throw new Exception("The method or operation is not implemented.");
    }

    #endregion
}

 

说明:

 

多态是面向对象编程的三大特性之一。

接口和虚函数是多态的表现形式。

在需要多态的情境下:

 

如果类中方法可以确定下来,而以后可能改变方法的用途,使用虚函数较好。

如果类中方法不确定,用途也不确定。只能确定格式,那么使用接口,以方便需要的类进行继承。进行扩展。

抽象类不能多态。抽象类是用于在开发初期不清楚或者不确定后续方法细则的情况下使用。

 

虚函数是一个已经定义好的函数,可以直接使用。

接口只是定义契约,没有具体实现。必须继承后实现才能使用。

接口本质上仍然被标记为.class,同时提供abstract virtual 方法的Method,因此接口其实本质上可以看作是一个定义了抽象方法的类,该类仅提供了方法的定义,而没有方法的实现,其功能由接口的实现类来完成。

 

虚函数可以在抽象类和非抽象类中定义,而抽象方法必须在抽象类中定义。

抽象类中的非抽象方法,在派生的类中,不能重写。

 

posted on 2010-09-16 14:22 sduzgz 阅读(505) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


My Links

Blog Stats

常用链接

留言簿

随笔档案

搜索

最新评论

  • 1. re: 素数查找
  • @李现民
    奥,茅塞顿开啊,谢谢啊!
  • --张爱静
  • 2. re: 素数查找
  • 评论内容较长,点击标题查看
  • --李现民
  • 3. re: 素数查找
  • 牛人啊,我这习惯确实很多问题啊,命名空间那个我可以明白,你说的prim[i]那个循环还有最后sqrt(N)拿到外面,改成那样有什么好处啊,虽然觉得好,但是不知道为什么。@李现民
  • --张爱静
  • 4. re: 素数查找
  • 评论内容较长,点击标题查看
  • --李现民
  • 5. re: 接口,虚函数及纯虚函数
  • 分得太细反而着了相, 不要太看重语法上的区别,这些东西都是基于应用而衍生的,多研究一些设计的东西, 比仔细区分这些语法概念要合算
  • --李现民

阅读排行榜

评论排行榜