Java - Kalıtım #2 Çok Düzeyli Bir Hiyerarşi Oluşturmak

Salı, Mayıs 12, 2015 kustemura 0 Yorum


Bir önceki yazılarımda kalıtım ile ilgili , bir üst sınıf birde alt sınıf oluşturmuştuk.Bu yapıyı istediğiniz kadar kalıtım katmanı içeren bir hiyerarşi oluşturabilirsiniz.Oluşturulmuş bir alt sınıfın  ( subclass) başka bir sınıfın üst sınıfı olabileceğinden önceki yazılarımda bahsetmiştim.
Şimdi örneğimize kaldığımız yerden devam edelim ve bu örneğe yeni bir sınıf ekleyelim.Dikdörtgen örneğinde Dikdörtgene Ağırlık özelliği vermiştik , şimdi size bir Nakliye özelliği ekleyelim ve bu Dikdörtgenimizin bir ürün veya mal olduğunu düşünelim.
"Shipment" adında bir sınıf ekliyorum.


class Rectangle {
 private final double width;
 private final double height;
 private final double depth;

 Rectangle(Rectangle clone) {
  width = clone.width;
  height = clone.height;
  depth = clone.depth;
 }

 Rectangle(double width, double height, double depth) {
  this.width = width;
  this.height = height;
  this.depth = depth;
 }

 Rectangle() {
  width = -1;
  height = -1;
  depth = -1;
 }

 double volume() {
  return width * height * depth;
 }

}

class RectangleWeight extends Rectangle {
 double weight;

 RectangleWeight(RectangleWeight clone) {
  super(clone);
  weight = clone.weight;
 }

 RectangleWeight(double width, double height, double depth, double weight) {
  super(width, height, depth);
  this.weight = weight;

 }

 RectangleWeight() {
  super();
  weight = -1;
 }
}

class Shipment extends RectangleWeight {
 double cost;

 Shipment(Shipment clone) {
  super(clone);
  cost = clone.cost;
 }

 Shipment(double width, double height, double depth, double weight,
   double cost) {
  super(width, height, depth, weight);
  this.cost = cost;
 }

 Shipment() {
  super();
  cost = -1;
 }

}

class DemoShipment {
 public static void main(String args[]) {
  final Shipment shipment = new Shipment(5, 10, 15, 20, 30);
  final Shipment shipment2 = new Shipment(shipment);

  double vol;
  vol = shipment.volume();
  System.out.println("( shipment için ) \n Dikdörtgenin Hacmi " + vol
    + " \n Dikdörtgenin Ağırlığı : " + shipment.weight
    + " \n Nakliye Ücreti : $" + shipment.cost);
  System.out.println();
  vol = shipment2.volume();
  System.out.println("( shipment2 için ) \n Dikdörtgenin Hacmi " + vol
    + " \n Dikdörtgenin Ağırlığı : " + shipment2.weight
    + " \n Nakliye Ücreti : $" + shipment2.cost);
 }
}
( shipment için ) 
 Dikdörtgenin Hacmi 750.0 
 Dikdörtgenin Ağırlığı : 20.0 
 Nakliye Ücreti : $30.0

( shipment2 için ) 
 Dikdörtgenin Hacmi 750.0 
 Dikdörtgenin Ağırlığı : 20.0 
 Nakliye Ücreti : $30.0
super() devamlı en yakındaki üst sınıfın yapılandırıcısına göndermede bulunur.Shipment içindeki super(),RectangleWeight içerisindeki yapılandırıcıyı çağırır .RectangleWeight içerisindeki super() , Rectangle içindeki yapılandırıcıyı çağırır.Örneklerimin daha iyi anlaşılması için aynı dosya içerisinde oluşturarak anlatıyorum , aslında gerçekte her sınıfın farklı dosyalarda tutulması bir standarttır.

0 yorum :