多态、抽象

多态

概念:让一个对象能够表现出多种状态

实现多态:1.虚方法(父类方法virtual、子类方法overwrite,可以实例化);

​ 2.抽象类;(抽象出一个父类,共有方法,方法不能实现)

​ 3.接口;(找不出父类,有相同行为)

动态多态常指抽象类的继承;

静态多态可用泛化编程实现,使用模板可行;

函数多态即重载;

宏多态原因在于它只是进行对应字节调换,不会辨别变量类型。

    #region 三个虚方法实现多态的测试类
    class Animal
    {
        public virtual void action()
        {
            Console.WriteLine("animal run");
        }
    }

    class Cat:Animal
    {
        public override void action()
        {
            Console.WriteLine("Cat eat");
        }
    }

    class Dog:Animal
    {
        public override void action()
        {
            Console.WriteLine("Dog fly");
        }
    }
    #endregion
  #region 多态例子
      
            Animal animal = new Animal();
            Cat cat = new Cat();
            Dog dog = new Dog();
            Animal[] nums = { animal, dog, cat };
            List<object> list = new List<object>();
            list.Add(cat);
            list.Add(animal);
            list.Add(dog);

            for (int i = 0; i < nums.Length; i++)
            {
                nums[i].action();
            }
            //集合乱入
            for (int i = 0; i < list .Count; i++)
            {
                Console.WriteLine(list[i]);
            }
            Console.ReadKey();

   #endregion

抽象:abstract

不允许有方法体

不知道如何去实现

  1. 如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,用虚方法来实现多态。
  2. 如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类
 #region 三个抽象多态测试类:计算面积和周长
    //形状类
    abstract class  Shape
    {
        
        public abstract double getS();
        public abstract double getZ();
    }


    //圆类
    class Circle : Shape
    {
        public Circle(double r)
        {
            this.R = r;
        }

        public Circle()
        {

        }

        private double r;
        public double R
        {
            get { return r; }
            set { r = value; }
        }
        public override double getS()
        {
            return Math.PI*R*R;
        }
        public override double getZ()
        {
            return 2*Math.PI*R;
        }

    }


    //矩形类
    class Square : Shape
    {

        private double l;
        private double h;

        public Square(double h,double l)
        {
            this.H = h;
            this.L = l;
        }
        public Square() { }

        public double L
        {
            get { return l; }
            set { l = value; }
        }

        public double H
        {
            get { return h; }
            set { h = value; }
        }


        public override double getS()
        {
            return L * H;
        }

        public override double getZ()
        {
            return (L + H) * 2;
        }

    }
    #endregion
        
        
        
        
     Shape shape = new Circle(5);//new Square(5,9);
     double res1 = shape.getS();
     double res2 = shape.getZ();
     Console.WriteLine(res1);
     Console.WriteLine(res2);

其余随记:

在一个项目中引用另外一个项目的类:

  1. 添加引用
  2. 引用命名空间

protected 是受保护的,只有当前类的成员与继承该类的类才能访问;private是完全私有的,有当前类中的成员能访问到。

<字符串>
    * 1.Split()       分割不想要的,返回字符数组
    * 2.Substring()   切割字符串
    * 3.ToUpper()     转大写
    * 4.ToLower()     转小写
    * 5.Trim()        去两边空格
    * 6.TrimEnd()     去后面空格
    * 7.TrimStart()   去前面空格
    * 8.Constains()   判断是否包含
    * 9.Replace()     替换
    * 10.IndexOf()        查找第一次出现位置
    * 11.LastIndexOf()    最后一次出现位置
    * 12.StartWith()      以什么开始
    * 13.EndWith          以什么结束
    * 14.string.join()    把数组按照指定连接符连接
    * 15.string.IsNullOrEmpty()   是否为空
    * 16.ToCharArray()            变成char类型数组
    * 17.new string(char[] chs)   返回一个字符串
  

is:表示类型转换,如果能够转换成功,则返回一个true,否则返回false
as:表示类型转换,如果能够转换则返回对应的对象,否则返回null
//is 的用法

if(person is student){
    Student ss=(Student)person;
    ss.StudentSayHello();
}else{
    console.WriteLine("转换失败");
}
//as 的用法

Student t = p as Student;
t.StudentSayHello();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值