c#父類對象引用指向子類與方法重寫


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace csharp_test
{
    class Parentclass
    {
        public Parentclass()
        {
            Console.WriteLine("this is parentclass's cunstructor");
        }

        public  void print()
        {
            Console.WriteLine("this is parent 's print");
        }
    }

    class Childclass : Parentclass
    {
        public Childclass()
        {
            Console.WriteLine("this is childclass's cunstructor");
        }

        public  void print()
        {
            Console.WriteLine("this is child 's print");
        }

        static void Main(string []args)
        {
            Parentclass p = new Parentclass();
            p.print();
            Parentclass c = new Childclass();
            c.print();
        }
    }
}

this is parentclass's cunstructor
this is parent 's print
this is parentclass's cunstructor
this is childclass's cunstructor
this is parent 's print
運行結果如上,可見,如果聲明一個父類對象指向子類對象,會調用父類的方法。

如果將子類的print方法刪除,仍然會調用父類的方法,但是如果刪除父類的方法,就會報錯。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace csharp_test
{
    class Parentclass
    {
        public Parentclass()
        {
            Console.WriteLine("this is parentclass's cunstructor");
        }

        public  void print()
        {
            Console.WriteLine("this is parent 's print");
        }
    }

    class Childclass : Parentclass
    {
        public Childclass()
        {
            Console.WriteLine("this is childclass's cunstructor");
        }

        public  void print()
        {
            Console.WriteLine("this is child 's print");
        }

        static void Main(string []args)
        {
            Parentclass p = new Parentclass();
            p.print();
            Childclass c = new Childclass();
            c.print();
        }
    }
}

this is parentclass's cunstructor
this is parent 's print
this is parentclass's cunstructor
this is childclass's cunstructor
this is child 's print

運行結果如上,可見,如果聲明子類對象指向子類對象,會調用子類的方法。

如果刪除了子類方法,那么就會自動調用父類的print方法。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace csharp_test
{
    class Parentclass
    {
        public Parentclass()
        {
            Console.WriteLine("this is parentclass's cunstructor");
        }

        public virtual void print()
        {
            Console.WriteLine("this is parent 's print");
        }
    }

    class Childclass : Parentclass
    {
        public Childclass()
        {
            Console.WriteLine("this is childclass's cunstructor");
        }

        public override void print()
        {
            Console.WriteLine("this is child 's print");
        }

        static void Main(string []args)
        {
            Parentclass p = new Parentclass();
            p.print();
            Parentclass c = new Childclass();
            c.print();
        }
    }
}

this is parentclass's cunstructor
this is parent 's print
this is parentclass's cunstructor
this is childclass's cunstructor
this is child 's print

結果如上所示,如果子類重寫了父類的方法,那么盡管父類是指向子類的,但是仍然會調用子類的方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM