• 面向对象-多态 附抽象


    面向对象有三大特征:继承,封装,多态。
    什么是多态?
    多态就是对象可以表现多个类型的能力
    实现多态有三种手段:
    1、虚方法
    2、抽象类
    3、接口
    一、虚方法
    看一段代码

    namespace 多态
    {
        public class Program
        {
            static void Main(string[] args)
            {
                Person p = new Person("人类");
                p.Show();
                Chinese china = new Chinese("中国人");
                p.Show();
                Console.ReadKey();
            }
        }
        public class Person
        {
            public string Name { get; set; }
    
            public Person(string name)
            {
                this.Name = name;
            }
            public void Show()
            {
                Console.WriteLine("我叫{0}", this.Name);
            }
        }
    
        public class Chinese : Person
        {
            public Chinese(string name)
                : base(name)
            {
            }
            public void Show()
            {
                Console.WriteLine("我叫{0}",base.Name);
            }
        }
    
        public class Japanese : Person
        {
            public Japanese(string name)
                : base(name)
            { }
            public void Show()
            {
                Console.WriteLine("我是{0}",base.Name);
            }
        }
    }

    可以发现其中的方法名字跟父类的名字一样。运行的时候发现子类方法报绿线错误,
    如果子类的方法跟子类的方法名相同,那么子类会默认的将父类的方法隐藏掉,解决方法有两种
    1.new关键字

    1).new的作用:隐藏子类从父类继承过来的方法。

    //子类的类
      public class Japanese : Person
        {
            public Japanese(string name)
                : base(name)
            { }
    //方法这里加一个new关键字
            public new void Show()
            {
                Console.WriteLine("我是{0}",base.Name);
            }
        }

    2。使用虚方法
    1)、将父类的方法标记为virtual 表示这个父类的方法可以被子类重写

    //父类的方法
     public class Person
        {
            public string Name
            {
                get;
                set;
            }
            public Person(string name)
            {
                this.Name = name;
            }
    //父类的方法加virtual 
            public virtual void SayHello()
            {
                Console.WriteLine("大家好,我叫{0},我是人类", this.Name);
            }
        }

    2)、将子类的方法标记为override  表示重写父类的方法

    //子类的方法
     public class Chinese : Person
        {
            public Chinese(string name)
                : base(name)
            {
    
            }
    //子类的方法中加override 实现虚方法
            public override void SayHello()
            {
                Console.WriteLine("大家好,我叫{0},我是中国人", this.Name);
            }
        }

    虚方法与重写
    1、方法不能用static修饰
    2、方法重写与基类的签名必须一致
    3、virtual不能与private一起使用
    4.虚方法为什么不能加static因为 虚方法是父类,加static,那么就是类调用这个方法,和对象无关了,那子类就调不了.

    常见虚方法:Equal()ToString()GetHashCode()
    override与重载(overload)的区别 
    重载是方法的名称相同。参数或参数类型不同,进行多次重载以适应不同的需要。重载(overload)是面向过程的概念。Override 是进行基类中函数的重写。Override是面向对象的概念
    二、抽象类抽象类与抽象方法由abstract修饰abstract的使用注意1,抽象方法没有方法体2.抽象成员只能存在于3.抽象类中抽象类可以有非抽象成员4.抽象类的派生类必须实现抽象方法体5.抽用作基类,无法实例化

  • 相关阅读:
    解析库之 beautifulsoup模块
    请求库之 selenium模块
    请求库之 requests模块
    一句话
    JPA学习03
    JPA学习02
    JPA学习01
    SpringData学习04
    SpringData学习03
    SpringData学习02
  • 原文地址:https://www.cnblogs.com/xran/p/3175365.html
Copyright © 2020-2023  润新知