c#面向对象3--继承(base)/new隐藏父类同名成员/里氏

2021-03-26  本文已影响0人  Mona_Song

Tips:
1.把两个类写在同一个命名空间下的做法是错误的,适用于教学,不适用于项目开发;真正的项目每一个类都应该存在于一个单独的类文件;

1.继承:

base

class Program
    {
        static void Main(string[] args)
        {
            Person[] p = new Person[2];
            p[0] = new Person();
            p[1] = new Chinese();
            foreach (var item in p)
            {
                item.sayHello();
            }
        }
        public class Person
        {
            public virtual void sayHello()
            {
                Console.WriteLine("father class: Person");
            }
        }
        public class Chinese:Person
        {
            public override void sayHello()
            {
                base.sayHello(); //这里base是调用了父类的SayHello方法,base相当于父类对象的作用
            }
        }
    } 
上图运行效果

2. 关键字new的作用

子类Reporter类中的同名方法

3.里氏转换

子类可以赋值给父类:例1

1.这里需要一个object类型的可变数组
2.使用object的子类string类型的可变数组填充
子类可以赋值给父类:例2
把子类Student赋值给父类Person
父类强转为子类对象:例1
1.p中装的是子类对象
2.将这个父类对象p强转为子类对象ss,调用子类方法成功说明强转成功
转换失败案例:引出as,is
这里不能转换成功,会报异常(因为父类中装的是student对象,现在却想转换成teacher对象)

4.AS/IS

5.练习

6.Protected

上一篇 下一篇

猜你喜欢

热点阅读