1. 程式人生 > >隱藏基類成員 淺談

隱藏基類成員 淺談

#region   //隱藏基類成員的使用
    /*
     *可以在派生類中使用base訪問基類的成員。但是不能在靜態方法中使用base
     */
    class Person
    {
        private string name;
        private int age;
        private long ID;
        public Person(string n, int a, long i)
        {
            name = n;
            age = a;
            ID = i;
        }
        public string speak()
        {
            return string.Format("姓名:{0},年齡:{1},身份證號:{2}",name,age,ID);
        }

        public void say()
        {
            Console.WriteLine("I am a Person ");
        }
    }

    class Student : Person
    {
        private string department;
        private int no;
        public Student(string n, int a, long i, string d, int s)
            : base(n, a, i)
        {
            department = d;
            no = s;
        }

        public new string speak()
        {
            return string.Format("學號:{0}\n,{1},\n專業:{2}",no, base.speak(), department);
        }
        
        public new void say()
        {
            Console.WriteLine("I am a student");
        }
    }

#endregion
    class Program
    {
        static void Main(string[] args)
        {
            Person stu1=new Student("麗麗",21,12345,"電氣系",01);
            Console.WriteLine(stu1.speak());
            stu1.say();

            Student stu2 = new Student("雷哥",21,12345,"計算機系", 01);
            Console.WriteLine(stu2.speak());
            stu2.say();
            Console.Read();
        }
    }

輸出結果:


/*從上面兩個物件,一個基類的物件 stu1,一個子類的物件stu2,從上面的輸出結果可以看出
            * 隱藏類成員,父類物件呼叫父類的方法(即使該方法被子類隱藏)。而子類呼叫方法時,如果該方法隱藏了
            * 父類的方法,則呼叫自身的,如果沒有隱藏(自身沒有該方法,則從父類中尋找。)
            */