面向对象——继承与构造函数

举报
AI浩 发表于 2021/12/23 00:42:06 2021/12/23
【摘要】 继承的概念:让派生类(子类)拥有基类(父类)所有的功能。 实现:通过在派生类后加 “:”冒号,实现继承。好处:增加了代码的重用性。 如果一个类没有显示定义其父类,那么他的父类是System.Object,只能有一个基类。 创建派生类对象的时候,默认的情况的下,在派生类通过调用基类的默认构造(访问修饰符是public,并且没有任何的...

继承的概念:让派生类(子类)拥有基类(父类)所有的功能。

实现:通过在派生类后加 “:”冒号,实现继承。好处:增加了代码的重用性。

如果一个类没有显示定义其父类,那么他的父类是System.Object,只能有一个基类。

创建派生类对象的时候,默认的情况的下,在派生类通过调用基类的默认构造(访问修饰符是public,并且没有任何的形参)函数来创建基类对象的。如果基类没有默认的构造,则需要在派生类中显示调用基类的构造函数。

方式:派生类构造函数():base(实参)

{}

构造函数:类构造函数,对象构造函数,派生类调用基类的构造函数。构造函数的作用:初始化字段,给字段赋值。

静态构造函数:静态构造函数不能有访问修饰符,必须是静态的。

静态构造函数不能有任何参数。静态构造函数有且仅有一个构造函数。静态构造函数只执行一次,调入内存后就不再执行。

例:

   Public class Person

              {

         Static Person(){}

}

Static的作用:在内存中创建类的实体。

注:没有指定基类,则基类默认为object

防止继承—密封类,关键字(sealed),该类就不能作为其他类的基类。  

例:给饭卡充钱:

    public class Peson

    {

        private ushort height;//字段

        public ushort Height

        {

            get

            {

                Console.WriteLine("调用Get方法");

                return height;

            }

            set

            {

                Console.WriteLine("调用Set方法");

                height = value;

            }

        }

        private string name;

        private byte age;

    }

    public class Card

    {

        private string owner;

        public string Owner

        {

            get { return owner; }

            set { owner = value; }

        }

        private decimal balance;

        public decimal Balance

        {

            get { return balance; }

            set { balance = value; }

        }

    }

    public class Teacher : Peson

    {

        public void FullMoney(Card card, decimal money)

        {

            card.Balance += money;

        }

    }

    public class Student : Peson

    {

        private Card myCard;

        public Card MyCard

        {

            get { return myCard; }

            set { myCard = value; }

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

            Student s = new Student();

            s.Height = 15;

            Console.WriteLine(s.Height);

            Card card = new Card();

            s.MyCard = card;

            Teacher t = new Teacher();

            t.FullMoney(card, 100);

            Console.WriteLine(s.MyCard.Balance);

        }

    }

输出结果:

      调用Set方法

      调用Get方法

      15

      100

 

 派生类调用基类的方法:1、如果派生类中没有基类的方法,可以直接调用该方法。

 2、派生类中有该方法应该用base.方法名调用

例:public class CustomerAccount

    {

        public virtual decimal CalculatePrice()

        {

            return 0.0m;

        }

    }

    class GoldAccount : CustomerAccount

    {

        public override decimal CalculatePrice()

        {

            return base.CalculatePrice()*0.9m;

        }

}

构造函数举例:

 1、public class Student

    {

        public Student()

        {

            Console.WriteLine("调用构造函数");

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

            Student st = new Student();

        }

    }

输出结果:调用构造函数

例2、在继承中,创建对象的执行过程。

  public class Person

    {

        public Person()

        {

            Console.WriteLine("Peson");

        }

        public Person(string name)

        {

            Console.WriteLine("Name:"+name);

        }

    }

    public class Student:Person

    {

        public Student()

            : base()//当为无参时,可有可无,系统会自动添加

        {

            Console.WriteLine("调用构造函数");

        }

        public Student(string name)

            : base()//当基类有多个构造函数时,base用来指定调用的构造函数

        {

            Console.WriteLine("调用构造函数:姓名:"+name);

        }

        public Student(string name, int age)

            : base(name)//调用 Person(string name)构造函数

        {

            Console.WriteLine("调用构造函数:姓名:" + name+" 年龄:"+age);

        }

    }

    class Program

    {

        static void Main(string[] args)

        {

          Student st = new Student();

          Student st1 = new Student("xiaowang");

          Student st2 = new Student("xiaowang",12);

        }

    }

输出结果:

  Peson

  调用构造函数

Peson

调用构造函数:姓名:xiaowang

调用构造函数:姓名:xiaowang 年龄:12

 

文章来源: wanghao.blog.csdn.net,作者:AI浩,版权归原作者所有,如需转载,请联系作者。

原文链接:wanghao.blog.csdn.net/article/details/105481502

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。