public class Ulke
    {
        public int nufus;
        public int yuzolcumu;
        public string komsular;
        public void Denizler() { }
    }

    public class Sehir:Ulke
    {
        //Inheritance ornegi
        public int ilcesayisi;
        public  int otobussayisi;

    }

    class Program
    {
        static void Main(string[] args)
        {
            Ulke Turkiye = new Ulke(); // Ulke turunde bir class olan Turkiye'yi construct etmis olalim
            Turkiye.komsular = "Suriye"; // Komsular field ini tanimla
            Turkiye.yuzolcumu = 783; // yuzolcumu field ini tanimla
            Turkiye.nufus = 74; // nufus fieldini tanimla

            Sehir Istanbul = new Sehir(); // Sehir turunde bir class olan Turkiye'yi construct etmis olalim

            Istanbul.nufus = 15; // Istanbul'un nufus fieldini tanimla
            Istanbul.komsular = "Yalova";
            Istanbul.ilcesayisi = 23; // Istanbul'un ilcesayisi field'ini tanimla

            //Polymorphism ornegi
            Ulke Karadeniz = Istanbul;
            // Karadeniz objesi Ulke turunde bir nesne ancak
            // Poly-morph ederek Istanbul'a ait ancak Ulkeden inherit edilmis fieldlari
            // Karadeniz inherit ediyor
            // Yani her ne kadar Karadeniz Sehirin ust classi olan Ulke classinda bir object de olsa
            // Sehir classinin bir nesnesi olan Istanbulun field larini almis oluyor

            Console.WriteLine(Karadeniz.nufus); // Istanbulun nufusu
            Console.WriteLine(Karadeniz.komsular); // Istanbulun komsulari
            //Console.WriteLine(Karadeniz.ilcesayisi) Istanbulun ilce sayisi tanimli oldugu halde Karadeniz Ulke
            // class'ina ait oldugundan dolayi ilcesayisi field'i olamaz.
            Console.ReadKey();

            //Ozetle polymorphism yeni yaratilan bir nesnenin, kendisinden once tanimlanmis
            //bir nesneden field lar alabilmesi ancak bu (field larin kopyalandigi) nesne ile
            //farkli siniflarda olabilmesidir.


        }
    }