抽象方法
抽象类中才有的方法,要求派生类必须重载这个方法;
定义方式:
}
}
注:抽象类中才能有抽象方法,抽象方法必须重写(override).有点类似C++中的纯虚方法.
虚方法
告诉编译器,这个方法可以重写。
当基类的方法与派生类的方法重名时,
可以选择派生类的方法从基类继承并重写(override), 还是,把基类的方法隐藏起来(hide)。
定义方式:
}
}
以上为类的创建方式,下面给出调用方式及上例输出结果:
1.抽象方法
说明:父类是抽象类,所以不能构造父类的对象(myclass mc=new myclass()); 而只能用父类来修饰子类对象,
这样同样可以调用到子类对象的方法.
2.虚方法
说明: 如果用类C修饰DC对象:
C dcClass2 = new DC();
dcClass2.method(); //调用C中的method(),输出(C Method!)
Console.WriteLine("=============");
总结:
重写时,访问父类,子类皆调用子类的重写方法;--其中抽象方法属于重写
隐藏时,访问父类则调用父类的方法,子类则调用子类的方法。--隐藏一般需要new关键字,否则有警告信息.
虚方法:
1.virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑.
2.virtual方法可以直接使用,和普通方法一样
3.不是必须重写的. 子类可以使用base.方法 的方式调用, 无论有没有在子类使用override去重写
总之:virtual关键字只是明确标示此方法可以被重写, 其实它和一般的方法没有什么区别 .
关于关键字的使用:
基类方法声明为virtual(虚方法),派生类中使用override申明此方法的重写.
如果基类没有virtual,刚派生类不能使用override,只能使用new,表示隐藏基类方法.
虚方法和抽象方法的区别:
1.虚方法可以有实现体,抽象方法不能有实现体。
2.抽象方法
要求派生类必须重载这个方法;