PHP JAVA ve C# Inheritance Yapısı
by admin on Eylül 22, 2010
Şöyle bir durum var. A diye bir sınıfım var.Bu A sınıfı B den miras alıyor.Peki A objesi oluşturulduğunda hangisinin constructor ı önce çalışacak.OOP yi az buçuk bilen bir kişi önce parent(B) sonra (A) nın constructorları çalışacak diyebilir.
Şimdi 3 örnek kod inceleyelim.PHP ve Java ve ASP.NET te ne gibi tepkiler veriyor. Java
public class Sinif1 extends Sinif2 {
public Sinif1()
{
System.out.println("Sınıf1 constructor çalıştı");
}
public static void main(String[] args) {
Sinif1 a = new Sinif1();
}
}
public class Sinif2 {
public Sinif2()
{
System.out.println("Sinif2 constructor çalıştı");
}
}
Ekran çıktısı şu olacaktır:
Sinif2 constructor çalıştı
Sınıf1 constructor çalıştı
.NET Örneği
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class Sinif2
{
public Sinif2()
{
Console.WriteLine("Base constructor çalıştı");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Sinif1 : Sinif2
{
public Sinif1()
{
Console.WriteLine("Inherited ctor çalıştı");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Sinif1 cls = new Sinif1();
Console.ReadLine();
}
}
}
Ekran Çıktısı :
Base constructor çalıştı.
Inherited ctos çalıştı.
şekinde olacaktır.
PHP örneğinde ise
<?php
class Sinif2
{
function __construct()
{
echo "Sinif2 constructor calisti.
";
}
}
class Sinif1 extends Sinif2
{
function __construct()
{
echo "Sinif1 constructor calisti.
";
}
}
$x = new Sinif1();
Ekran çıktısı şu şekilde oluyor:
Sinif1 constructor calisti.
Eğer üst sınıftaki constructor veya destructor ı çalıştırmak istiyorsanız. Mesela ilk olarak parent constructor çalışmasını istiyorsanız
class Sinif1 extends Sinif2
{
function __construct()
{
parent:__construct();
}
}
Şeklinde kullanmalısınız.
2 comments
ASP.NET bir dille yazılır (C#, VB v.s.). Dolayısıyla PHP, C# ve JAVA nın inheritance(miras alma) yapısı olmalı başlık. (BENCE!!!)
by Cem on 02 Ekim 2010 at 16:19. #
Gerçekten doğru söylüyorsun. Düzeltme için teşekkürler.
by Mustafa İleri on 05 Ekim 2010 at 13:52. #