封装、继承、重写和重载

封装:将类里面的成员变量和方法私有化,如果外界要访问,向外面提供一个统一访问的方法。

变量的封装

 //    private int age;

    //    public void Setage(int value)
    //        {
    //            if (value>0&&value<100)
    //            {
    //                age = value;
    //            }
    //        }
    //    public int Getage()
    //    {
    //        return age;
    //    }
    //

    //可以改成属性
    //    public int Age
    //{
    //    set;
    //    get;
    //}

方法的封装

 public void NewFun()
        {
            Age(12);
        
        }

        private void Age(int age)
        {
            Console.WriteLine("我的年龄是:"+age);
        }

好处:减少耦合(减少相互访问的次数,私有的变量方法只能被特定的公开方法访问)

           防止外界的修改

实现方法:1、编写public方法进行私有变量和方法的封装。

                 2、属性

 

继承:创建一个新的类(派生类/子类),可以继承现有类(基类/父类)的特性,并且还可以修改和扩充

1、父类只能有一个,子类可以有好多            

2、子类能不能调用父类里的方法取决于父类里面的方法

    public外界能访问,子类可以访问;

    private外界不能访问,子类不能访问,只能自己用;

    protected子类可以访问,外界不能访问

 

子类继承父类方法,但是子类方法名和父类的一致,这里我们需要覆写父类中的方法

 public class Laowang
    {
        public void play()
        {
            Console.WriteLine("我要去喝酒");
        }
        //虚方法
        //所有的虚方法可以重写
        public virtual void Eat()
        {
        }

    }
    public class Xiaowang : Laowang
    {
        //覆写,覆盖
        public new void play()
        {
            Console.WriteLine("我要去玩");
        }
        //重写
        public override void Eat()
        {
        }
    }

 

第一种是覆写,这里不提倡使用第二种是重写,也就是我们的虚方法,子类有自己的个性,想Eat自己的,这里我们外界调用xiaowang的Eat的时候只会输出小王的Eat,但是有时候我们子类想在父类的及基础上再加自己的Eat,即两个Eat都输出,这里我们就要使用

public class Xiaowang : Laowang
    {
        //覆写,覆盖
        public new void play()
        {
            Console.WriteLine("我要去玩");
        }
        //重写
        public override void Eat()
        {
            base.Eat();
        }
    }

base关键字可以在继承父类的基础上添加子类的方法

public class Laowang
    {
        public Laowang()
        {
        }
    }
    public class Xiaowang : Laowang
    {
        public Xiaowang()
        {
        }
    }

 

构造函数的继承

 public class Laowang
    {
        public Laowang()
        {
            Console.WriteLine("老王");
        }
    }
    public class Xiaowang : Laowang
    {
        public Xiaowang()
        {
            Console.WriteLine("小王");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Xiaowang xw = new Xiaowang();
            Console.ReadKey();
        }
    }

构造函数的继承和方法的继承是不同的,这里我们可以理解子类的构造函数自带base,所以结果子类父类的构造函数都会输出

而带参数的构造函数

public class Laowang
    {
        public Laowang(int age)
        {
            Console.WriteLine("老王"+age);
        }
    }
    public class Xiaowang : Laowang
    {
        public Xiaowang(int age) :base(age)
        {
            Console.WriteLine("小王" + age);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Xiaowang xw = new Xiaowang(age: 20);
            Console.ReadKey();
        }
    }

子类的构造方法需要加上base(参数名),这样子类和父类都能输出

 

重载:同名不同参(方法名相同,但是里面的参数不同)

 

 

 



 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值