C# 继承与多态

C#中,让一个类变成另一个类的子类只需要在命名空间后加上:b
比如说现在是有两个类:Fruit,Apple,Apple是Fruit的子类

    class Fruit
    {
        protected string from, birth;
        public Fruit(string fro,string birt)
        {
            from = fro;
            birth = birt;
        }
        public Fruit() { }
        public void Hello()
        {
            Console.WriteLine("These are Fruits");
        }
    }
    class Apple:Fruit
    {
        double val;
        public Apple(string fro,string birt,double val):base(fro,birt)
        {
            this.from = fro;
            this.birth = birt;
            this.val = val;
        }
        public new void Hello()
        {
            base.Hello();
            Console.WriteLine("I am apple,I'm from {0},each pound {1}$",from,val);
        }
    }

只需要在Apple后面加上:Fruit即可,之后Apple类就继承了Fruit的一些东西,若是想保证Fruit中的一些变量或者方法的隐私,但是又想Apple能调用它,那么就可以用protect来声明。在父类中重载带参数的重载方法的时候,子类有两种重载方法,一是把父类的重载包括进去,末尾加上:base(……),或者可以在父类中再写一个重载不带参数的重载方法。
如果子类中声明了与父类一样的方法,那么就可以在类型面前加上new来保证使用的是子类的方法,若是想调用父类同名的方法则可以加上base.Hello()。
还有,在主函数中声明子类不能用父类,会报错
在这里插入图片描述
但是用子类声明父类并且在赋值给子类则是可以的。
在这里插入图片描述
virtual方法表示此方法可以被重写, 也就是说这个方法具有多态.父类中的方法是通用方法,可以在子类中重写以重新规定方法逻辑。
现在我也不太清除Virtual的用处,大概就是可以在子类中重新声明,这样就是多态了吧。

    class Vehicle
    {
        protected string name;
        public Vehicle(string nam)
        {
            name = nam;
        }
        public Vehicle() { }
        public virtual string Turn(string s)
        {
            return "The " + name + " will turn " + s;
        }
    }
    class Car:Vehicle
    {
        public Car(string nam)
        {
            this.name = nam;
        }
        public override string Turn(string s)
        {
            return "new";
        }
    }

在声明Car变量的时候,输出的就是new了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值