Java - Kalıtım #2 Çok Düzeyli Bir Hiyerarşi Oluşturmak
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 :