隐藏基类:法1-用新的派生成员替换基成员
class A
{
public void fun()
{
Console.WriteLine("A");
}
}
class B : A
{
**new public void fun() //隐藏基类方法fun**
{
Console.WriteLine("B");
}
}
static void Main(string[] args)
{
B b = new B();
b.fun();
}
//结果是“B”
法2-重写虚拟的基成员
重写:子类基类有相同签名。:重写的基方法virtual、abstract或override。
重载:同类中,同名称,不同参数,不同签名。
默认,方法非虚拟,不能重写非虚方法。virtual修饰符不能与static、abstract和override修饰符一起使用。在静态属性上使用virtual修饰符是错误的。
class Student
{
protected int no; //学号
protected string name; //姓名
protected string tname; //班主任或指导教师
public void setdata(int no1, string name1, string tname1)
{
no = no1; name = name1; tname = tname1;
}
public virtual void dispdata() //虚方法
{
Console.WriteLine("本科生 学号:{0} 姓名:{1} 班 主 任:{2}", no, name, tname);
}
class Graduate : Student
{
public override void dispdata() //重写方法
{
Console.WriteLine("研究生 学号:{0} 姓名:{1} 指导教师:{2}",no, name, tname);
}
}
static void Main(string[] args)
{
Student s = new Student();
s.setdata(101, "王华", "李量");
s.dispdata();
Graduate g = new Graduate();
g.setdata(201, "张华", "陈军");
g.dispdata();
}
设计一个控制台应用程序,采用虚方法求长方形、圆、圆球体和圆柱体的面积或表面积。
public class Rectangle //长方形类
{
public const double PI = Math.PI;
protected double x, y;
public Rectangle() {
}
public Rectangle(double x1, double y1)
{
x = x1; y = y1;
}
public virtual double Area() //求面积
{
return x * y;
}
public class Circle : Rectangle //圆类
{
public Circle(double r) : base(r, 0) {
}
public override double Area() //求面积
{
return PI * x * x;
}
}
class Sphere : Rectangle //圆球体类
{
public Sphere(double r) : base(r, 0) {
}
public override double Area() //求面积
{
return 4 * PI * x * x;
}
}
class Cylinder : Rectangle //圆柱体类
{
public Cylinder(double r, double h) : base(r, h) {
}
public override double Area() //求面积
{
return 2 * PI * x * x + 2 * PI * x * y;
}
}
static void Main(string[] args)
{
double x = 2.4, y = 5.6;
double r = 3.0, h = 5.0;
Rectangle t = new Rectangle(x, y);
Rectangle c = new Circle(r);
Rectangle s = new Sphere(r);
Rectangle l = new Cylinder(r, h);
Console.WriteLine("长为{0},宽为{1}的长方形面积={2:F2}",
x, y, t.Area());
Console.WriteLine(" 半径为{0}的圆面积={1:F2}",
r, c.Area());
Console.WriteLine(" 半径为{0}的圆球体表面积={1:F2}",
r, s.Area());
Console.WriteLine("半径为{0},高度为{1}的圆柱体表面积={2:F2}", r, h, l.Area());
}