A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡元江 中级黑马   /  2013-2-23 15:26  /  1191 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

虚方法和抽象方法接口三者之间的区别,最好是有代码。谢谢。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

3 个回复

倒序浏览
虛函数:由virtual声明,它允许在派生类中被重写,要重写方法,必须先声明为virtual
public class myclass              
{                                                   
public virtual int myint()         
{                                       
      函数体;                          
}

class myclass1:myclass
{
   public override int myint()
{  
  函数体1;                           
    }
注:虚函数中可以有函数体,在子类里可以重写它,也可以不重写他

抽象类、抽象函数:由abstract声明,在抽象类中可以定义抽象方法,抽象方法基本沒有执行代码,

派生类必须重写它,提供其执行代码:
public abstract class myclass        
{                                             
public abstract int myint();         
}                                             
                                            
public class myclass1:myclass
{
public override int myint()
{
        函数体;
}
}
注:抽象函数里没有实现代码,如有派生类,必须重写他。--从抽象类派生的非抽象类必须包括继承

的所有抽象方法和抽象访问器的实现。

接口:由interface声明,是特殊的抽象类,是方法、属性、事件和索引符的组合,沒有字段,其成

员无执行方式,无构造函数,不允许进行运算符重载,接口和它的没有任何访问修饰符,它总是公共

的,不能声明为虚拟或静态,继承自接口的派生类必须实现接口中的所有方法
一个接口可从一个或多个基接口继承。

当基类型列表包含基类和接口时,基类必须是列表中的第一项。

实现接口的类可以显式实现该接口的成员。显式实现的成员不能通过类实例访问,而只能通过接口实

例访问
抽象类与接口的区别:

1.抽象类可以包含非抽象方法和抽象方法。这里非抽象方法就是抽象类自己的成员。而接口里都是“

抽象方法”,没有自己的成员

2.一个类可以继承自多个接口,但是只能继承一个类(包括抽象类)。

3.抽象类可以有字段。接口不能

总之,接口就相当于一个纯抽象类

回复 使用道具 举报
虚方法: 关键字---virtual ,  可以让派生类重写本类的方法.

这里有个类,就简单手写了:
public class Person
{
    public string _name;
    public int _age;
    public char _gender;

    public virtual void SayHello()
    {
        Console.WriteLine("我是父类");
    }
}

public class Student: Person
{
    public string _id;
   
    public override void Sayhello()
    {
        Console.WriteLine("我是学生子类");
    }
}

public class Teacher: Person
{
    public string _employee;
   
    public override void Sayhello()
    {
        Console.WriteLine("我是老师子类");
    }
}


有三个类,学生和老师继承自人类,下面我分别实例一个老师和学生,用父类来接收:

Person p1 = new Student();

Person p2 = new Teacher();

现在我调用SayHello这个方法:

p1.SayHello();    ---------------------  我是学生子类

p2.SayHello();    -----------------------我是老师子类

会得到不同的结果,这就是面向对象多态的体现。这是简单的介绍一下噢!

抽象方法跟虚方法类似,但是抽象方法只能存在于抽象类中,且抽象方法没有方法体:

public abstract class Person
{
    public string _name;
   
    public abstract void SayHello();  --------分号别忘了!!!
}             ------ 写不下了,接下楼.










评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 pokemon 于 2013-2-23 16:56 编辑

接上楼                        

如果一个类继承自抽象类,则必须实现抽象类中的所有抽象方法。


接口  ----- Interface

由于一个类最多只能继承另一个类,接口可以使一个类有多个基类。接口主要目的是为不相关的类提供通用的处理服务,由于C#中只允许树形结构中的单继承,即一个类只能继承一个父类,所以接口是让一个类具有两个以上基类的唯一方式。如果一个类“继承”了某个接口,则必须实现它!

Interface IFlyable
{
    void Fly();
}

...一个最简单的接口就好了..,然后就是实现它!

public class Student: Person , IFlyable
{
    ............................
    //最后必须实现这个接口
    public override void Fly()
    {
        Console.WriteLine("我会飞!");
    }
}                    就先介绍这么多吧,这是我所了解的了,大家一起学习!.









评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马