c#继承和接口设计 多态性

隐藏基类:法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());
            }

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41920585/article/details/109802437