Inheritance, Super, Override

Kategori: Java , 08 Temmuz 2019 , JanFranco


Bir şirketin çalışanlarının bilgilerini tutan bir yazılım yapacağımızı düşünelim. Her bir çalışan türü için (departman farkları, yöneticilik vs.) sınıflar oluşturacağız. Tüm sınıfları uzun uzun tanımlamamıza gerek yoktur. Nihayetinde tüm çalışanlar birer çalışandır. Yani Worker adında bir sınıf, class oluşturup, tüm çalışan gruplarının sınıflarını bu Worker sınıfından türetebiliriz. İşte buna Inheritance yani kalıtım denmektedir. Örnek üzerinden görelim, bir Worker.java dosyası açalım ve Worker classını yazalım:


public class Worker {

	private String name, department;
	private double salary;
	
	public Worker(String name) {
		this.name = name;
		this.department = "Unknown";
		this.salary = 0.0;
	}
	
	public Worker(String name, String department, double salary) {
		this.name = name;
		this.department = department;
		this.salary = salary;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getDepartment() {
		return department;
	}

	public void setDepartment(String department) {
		this.department = department;
	}

	public double getSalary() {
		return salary;
	}

	public void setSalary(double salary) {
		this.salary = salary;
	}

	public String showInfo() {
		return "Name = " + name + "\nDepartment = " + department + "\nSalary = " + salary; 
	}
	
}
Şimdi Supervisor.java adında bir dosya açalım ve Supervisor sınıfını, classını yazalım. Burada Inheritance kavramını uygulayabilmek için sınıfı tanımlarken extends anahtar kelimesini kullanacağız. Bu anahtar kelimeyi kullandığımızda, miras aldığımız sınıfın tüm public değişkenlerine, fonksiyonlarına erişebileceğiz:

public class Supervisor extends Worker{

	private int numPersonsResbonsible;
	
	public Supervisor(String name) {
		super(name);
		this.numPersonsResbonsible = 0;
	}
	
	public Supervisor(String name, String department, double salary, int numPersonsResbonsible) {
		super(name, department, salary);
		this.numPersonsResbonsible = numPersonsResbonsible;
	}
	
	public String showInfo() {
		return "Name = " + getName() + "\nDepartment = " + getDepartment() + "\nSalary = " + getSalary() + 
				"\nNumber of Persons Responsible = " + numPersonsResbonsible;
		
	}
	
}
Burada dikkatimizi çekmesi gereken ilk nokta super anahtar kelimesidir. super anahtar kelimesi miras aldığımız sınıfı temsil eder. Bir diğer nokta ise showInfo fonksiyonunun aynı isimle iki sınıfta da tanımlanmasıdır. Buna overriding denmektedir. Ayrıca görüyoruz ki miras aldığımız sınıfın getter, setter methodlarını sıkıntı olmadan kullanabiliyoruz. Şimdi Main_Class.java dosyasındaki ana sınıfımızda bu iki sınıfı kullanarak 4 obje oluşturup test edelim:

public class Main_class {
	
	public static void main(String args[]) {
				
		Worker worker1 = new Worker("Jan Franco");
		Worker worker2 = new Worker("Jan Franco", "Data Scientist", 12345);
		Supervisor sp1 = new Supervisor("Jan Franco");
		Supervisor sp2 = new Supervisor("Jan Franco", "Data Scientist", 12345, 12);
		
		System.out.println(worker1.showInfo());
		System.out.println("****************");
		System.out.println(worker2.showInfo());
		System.out.println("****************");
		System.out.println(sp1.showInfo());
		System.out.println("****************");
		System.out.println(sp2.showInfo());
		System.out.println("****************");
		
	}
	
}
>>

Name = Jan Franco
Department = Unknown
Salary = 0.0
****************
Name = Jan Franco
Department = Data Scientist
Salary = 12345.0
****************
Name = Jan Franco
Department = Unknown
Salary = 0.0
Number of Persons Responsible = 0
****************
Name = Jan Franco
Department = Data Scientist
Salary = 12345.0
Number of Persons Responsible = 12
****************


Sonraki Yazı: Polymorphisim, instanceof
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın