黑马程序员技术交流社区
标题:
虚方法和抽象方法的区别?
[打印本页]
作者:
大牙到潍坊
时间:
2013-12-5 23:17
标题:
虚方法和抽象方法的区别?
本帖最后由 大牙到潍坊 于 2013-12-6 12:29 编辑
虚方法(virtual )和抽象方法(abstract)的区别?
作者:
七里香
时间:
2013-12-5 23:29
区别很大,一个有方法体,一个没有。所以虚方法可以调用,但是抽象方法没办法调用哦。而且因为抽象方法没有方法体,所以有抽象方法的类也必须为abstract修饰的抽象类。而且抽象类不能被实例化。继承抽象类的子类必须实现抽象方法,除非子类也为抽象类。至于相似点嘛,那都是可以在子类中用override重写。
作者:
不明觉厉
时间:
2013-12-5 23:32
虚方法 抽象方法
1.virtual修饰 用abstract修饰
2.要有方法体,哪怕是一个分号 不允许有方法体可以被子类override
3.必须被子类override除了密封类外都可以写 只能在抽象类中
作者:
土豆泥
时间:
2013-12-6 10:59
虚方法必须有实现部分,抽象方法没有实现部分
虚方法为派生类提供了覆盖选项,抽象方法是强制派生类覆盖
虚方法没必要重写,抽象方法必须在派生类中重写
抽象方法可以看成是没有实现部分的虚方法。
作者:
u010209195
时间:
2013-12-6 12:09
本帖最后由 u010209195 于 2013-12-6 12:13 编辑
虚方法
: 关键字---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(); -----------------------我是老师子类
会得到不同的结果,这就是
面向对象多态的体现
。这是简单的介绍一下噢!
作者:
u010209195
时间:
2013-12-6 12:13
本帖最后由 u010209195 于 2013-12-6 12:15 编辑
抽象方法
跟虚方法类似,但是抽象方法只能存在于抽象类中,且抽象方法没有方法体:
public abstract class Person
{
public string _name;
public abstract void SayHello(); --------分号别忘了!!!
}
复制代码
如果一个类继承自抽象类,则必须实现抽象类中的所有抽象方法
。
再补充一个接口吧,一般情况下是这三个一起比较区别和联系的;
接口 -----Interface
由于一个类最多只能继承另一个类,接口可以使一个类有多个基类。接口主要目的是为不相关的类提供通用的处理服务,由于C#中只允许树形结构中的单继承,即一个类只能继承一个父类,所以接口是让一个类具有两个以上基类的唯一方式。如果一个类“继承”了某个接口,则必须实现它!
接口定义名称的时候最好以I开头,这个是规范书写代码的一种习惯。
Interface IFlyable
{
void Fly();
}
复制代码
一个最简单的接口就好了..,然后就是实现它!
public class Student: Person , IFlyable
{
............................
//最后必须实现这个接口
public override void Fly()
{
Console.WriteLine("我会飞!");
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2