Java - Kalıtım

Kalıtım, bir sınıfın diğerinin özelliklerini (yöntemleri ve alanları) elde ettiği süreç olarak tanımlanabilir. Kalıtımın kullanılmasıyla, bilgiler hiyerarşik bir sırada yönetilebilir hale getirilir.

Diğerinin özelliklerini miras alan sınıf, alt sınıf (türetilmiş sınıf, alt sınıf) olarak bilinir ve özellikleri miras alınan sınıf, üst sınıf (temel sınıf, ana sınıf) olarak bilinir.

Anahtar Kelimeyi genişletir

extendsbir sınıfın özelliklerini devralmak için kullanılan anahtar kelimedir. Extends anahtar kelimesinin sözdizimi aşağıdadır.

Syntax

class Super {
   .....
   .....
}
class Sub extends Super {
   .....
   .....
}

Basit kod

Aşağıda, Java kalıtımını gösteren bir örnek verilmiştir. Bu örnekte, Calculation ve My_Calculation olmak üzere iki sınıfı gözlemleyebilirsiniz.

Extends anahtar sözcüğünü kullanarak, My_Calculation, Calculation sınıfının toplama () ve Çıkarma () yöntemlerini miras alır.

Aşağıdaki programı My_Calculation.java adlı bir dosyaya kopyalayıp yapıştırın

Example

class Calculation {
   int z;
	
   public void addition(int x, int y) {
      z = x + y;
      System.out.println("The sum of the given numbers:"+z);
   }
	
   public void Subtraction(int x, int y) {
      z = x - y;
      System.out.println("The difference between the given numbers:"+z);
   }
}

public class My_Calculation extends Calculation {
   public void multiplication(int x, int y) {
      z = x * y;
      System.out.println("The product of the given numbers:"+z);
   }
	
   public static void main(String args[]) {
      int a = 20, b = 10;
      My_Calculation demo = new My_Calculation();
      demo.addition(a, b);
      demo.Subtraction(a, b);
      demo.multiplication(a, b);
   }
}

Yukarıdaki kodu aşağıda gösterildiği gibi derleyin ve yürütün.

javac My_Calculation.java
java My_Calculation

Programı çalıştırdıktan sonra aşağıdaki sonucu üretecektir -

Output

The sum of the given numbers:30
The difference between the given numbers:10
The product of the given numbers:200

Verilen programda, bir nesne My_Calculationsınıf oluşturulur, içinde üst sınıfın içeriğinin bir kopyası yapılır. Bu nedenle, alt sınıfın nesnesini kullanarak bir üst sınıfın üyelerine erişebilirsiniz.

Üst sınıf referans değişkeni alt sınıf nesnesini tutabilir, ancak bu değişkeni kullanarak yalnızca üst sınıfın üyelerine erişebilirsiniz, bu nedenle her iki sınıfın üyelerine erişmek için her zaman alt sınıfa referans değişkeni oluşturmanız önerilir.

Yukarıdaki programı düşünürseniz, sınıfı aşağıda verildiği gibi başlatabilirsiniz. Ancak üst sınıf referans değişkenini kullanarak (cal bu durumda) yöntemi çağıramazsınız multiplication()My_Calculation alt sınıfa ait olan.

Calculation demo = new My_Calculation();
demo.addition(a, b);
demo.Subtraction(a, b);

Note- Bir alt sınıf, tüm üyeleri (alanlar, yöntemler ve iç içe geçmiş sınıflar) üst sınıfından miras alır. Oluşturucular üye değildir, bu nedenle alt sınıflar tarafından miras alınmazlar, ancak üst sınıfın yapıcısı alt sınıftan çağrılabilir.

Süper anahtar kelime

super anahtar kelime benzer thisanahtar kelime. Süper anahtar kelimenin kullanıldığı senaryolar aşağıdadır.

  • İçin kullanılır differentiate the members aynı isme sahiplerse, alt sınıf üyelerinden üst sınıf.

  • İçin kullanılır invoke the superclass alt sınıftan yapıcı.

Üyelerin Farklılaştırılması

Bir sınıf başka bir sınıfın özelliklerini miras alıyorsa. Üst sınıfın üyeleri alt sınıfla aynı adlara sahipse, bu değişkenleri ayırt etmek için aşağıda gösterildiği gibi süper anahtar kelimesini kullanırız.

super.variable
super.method();

Basit kod

Bu bölüm size cihazın kullanımını gösteren bir program sunar. super anahtar kelime.

Verilen programda, Sub_class ve Super_class adında iki sınıfınız var , her ikisinde de farklı uygulamalara sahip display () adında bir yöntem ve farklı değerlere sahip num adında bir değişken var. Her iki sınıfın display () yöntemini çağırıyoruz ve her iki sınıfın değişken num değerini yazdırıyoruz. Burada, süper sınıfın üyelerini alt sınıftan ayırmak için süper anahtar sözcüğünü kullandığımızı gözlemleyebilirsiniz.

Programı kopyalayıp Sub_class.java adlı bir dosyaya yapıştırın.

Example

class Super_class {
   int num = 20;

   // display method of superclass
   public void display() {
      System.out.println("This is the display method of superclass");
   }
}

public class Sub_class extends Super_class {
   int num = 10;

   // display method of sub class
   public void display() {
      System.out.println("This is the display method of subclass");
   }

   public void my_method() {
      // Instantiating subclass
      Sub_class sub = new Sub_class();

      // Invoking the display() method of sub class
      sub.display();

      // Invoking the display() method of superclass
      super.display();

      // printing the value of variable num of subclass
      System.out.println("value of the variable named num in sub class:"+ sub.num);

      // printing the value of variable num of superclass
      System.out.println("value of the variable named num in super class:"+ super.num);
   }

   public static void main(String args[]) {
      Sub_class obj = new Sub_class();
      obj.my_method();
   }
}

Aşağıdaki sözdizimini kullanarak yukarıdaki kodu derleyin ve yürütün.

javac Super_Demo
java Super

Programı çalıştırırken aşağıdaki sonucu alacaksınız -

Output

This is the display method of subclass
This is the display method of superclass
value of the variable named num in sub class:10
value of the variable named num in super class:20

Superclass Constructor'ı Çağırma

Bir sınıf başka bir sınıfın özelliklerini miras alıyorsa, alt sınıf otomatik olarak üst sınıfın varsayılan yapıcısını alır. Ancak, üst sınıfın parametreli bir kurucusunu çağırmak istiyorsanız, aşağıda gösterildiği gibi super anahtar kelimesini kullanmanız gerekir.

super(values);

Basit kod

Bu bölümde verilen program, süper sınıfın parametreleştirilmiş yapıcısını çağırmak için super anahtar kelimesinin nasıl kullanılacağını gösterir. Bu program, bir üst sınıf ve bir alt sınıf içerir; burada üst sınıf, bir tamsayı değerini kabul eden parametreleştirilmiş bir kurucu içerir ve süper anahtar sözcüğünü, üst sınıfın parametreli yapıcısını çağırmak için kullandık.

Aşağıdaki programı Subclass.java adlı bir dosyaya kopyalayıp yapıştırın.

Example

class Superclass {
   int age;

   Superclass(int age) {
      this.age = age; 		 
   }

   public void getAge() {
      System.out.println("The value of the variable named age in super class is: " +age);
   }
}

public class Subclass extends Superclass {
   Subclass(int age) {
      super(age);
   }

   public static void main(String args[]) {
      Subclass s = new Subclass(24);
      s.getAge();
   }
}

Aşağıdaki sözdizimini kullanarak yukarıdaki kodu derleyin ve yürütün.

javac Subclass
java Subclass

Programı çalıştırırken aşağıdaki sonucu alacaksınız -

Output

The value of the variable named age in super class is: 24

IS-A İlişkisi

IS-A şunu söylemenin bir yoludur: Bu nesne, o nesnenin bir türüdür. Bakalım nasılextends anahtar kelime, kalıtım elde etmek için kullanılır.

public class Animal {
}

public class Mammal extends Animal {
}

public class Reptile extends Animal {
}

public class Dog extends Mammal {
}

Şimdi, yukarıdaki örneğe dayalı olarak, Nesne Yönelimli terimlerle, aşağıdakiler doğrudur:

  • Hayvan, Memeli sınıfının üst sınıfıdır.
  • Animal, Reptile sınıfının üst sınıfıdır.
  • Memeli ve Sürüngen, Hayvan sınıfının alt sınıflarıdır.
  • Köpek, hem Memeli hem de Hayvan sınıflarının alt sınıfıdır.

Şimdi, IS-A ilişkisini düşünürsek şunu söyleyebiliriz -

  • Memeli IS-Bir Hayvandır
  • Sürüngen IS-Bir Hayvandır
  • Köpek Memelidir
  • Dolayısıyla: Köpek de Bir Hayvandır

Extends anahtar kelimesinin kullanılmasıyla, alt sınıflar, süper sınıfın özel özellikleri haricinde, üst sınıfın tüm özelliklerini devralabilir.

Örnek operatörü kullanımıyla Mammal'in aslında bir Hayvan olduğundan emin olabiliriz.

Example

class Animal {
}

class Mammal extends Animal {
}

class Reptile extends Animal {
}

public class Dog extends Mammal {

   public static void main(String args[]) {
      Animal a = new Animal();
      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
}

Bu, aşağıdaki sonucu verecektir -

Output

true
true
true

İyi bir anlayışa sahip olduğumuz için extends anahtar kelime, implements anahtar kelime IS-A ilişkisini elde etmek için kullanılır.

Genel olarak implementsanahtar sözcük, bir arabirimin özelliklerini devralmak için sınıflarla birlikte kullanılır. Arayüzler asla bir sınıf tarafından genişletilemez.

Example

public interface Animal {
}

public class Mammal implements Animal {
}

public class Dog extends Mammal {
}

Anahtar Kelime örneği

Kullanalım instanceof Operatör, Memeli'nin gerçekten bir Hayvan olup olmadığını ve köpeğin aslında bir Hayvan olup olmadığını kontrol edecek.

Example

interface Animal{}
class Mammal implements Animal{}

public class Dog extends Mammal {

   public static void main(String args[]) {
      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
}

Bu, aşağıdaki sonucu verecektir -

Output

true
true
true

HAS-A ilişkisi

Bu ilişkiler esas olarak kullanıma dayanmaktadır. Bu, belirli bir sınıfınHAS-Abelli şey. Bu ilişki, kodun yinelenmesinin yanı sıra hataların da azaltılmasına yardımcı olur.

Bir örneğe bakalım -

Example

public class Vehicle{}
public class Speed{}

public class Van extends Vehicle {
   private Speed sp;
}

Bu, Van sınıfının HAS-A Speed ​​olduğunu gösterir. Speed ​​için ayrı bir sınıfa sahip olduğumuz için, Speed ​​sınıfının birden çok uygulamada yeniden kullanılmasını mümkün kılan Van sınıfının içine hıza ait olan kodun tamamını koymak zorunda kalmayız.

Nesne Yönelimli özellikte, kullanıcıların gerçek işi hangi nesnenin yaptığı konusunda endişelenmesine gerek yoktur. Bunu başarmak için Van sınıfı, uygulama ayrıntılarını Van sınıfı kullanıcılarından gizler. Yani, temelde, kullanıcılar Van sınıfından belirli bir eylemi yapmasını isteyecek ve Van sınıfı ya işi kendi başına yapacak ya da başka bir sınıftan eylemi gerçekleştirmesini isteyecektir.

Kalıtım Türleri

Aşağıda gösterildiği gibi çeşitli kalıtım türleri vardır.

Hatırlanması gereken çok önemli bir gerçek, Java'nın çoklu kalıtımı desteklememesidir. Bu, bir sınıfın birden fazla sınıfı genişletemeyeceği anlamına gelir. Bu nedenle takip etmek yasa dışıdır -

Example

public class extends Animal, Mammal{}

Bununla birlikte, bir sınıf, Java'nın çoklu kalıtımın imkansızlığından kurtulmasına yardımcı olan bir veya daha fazla arabirim uygulayabilir.