Erişim Belirleyiciler ve Liskov prensibi

Aşağıdaki kod durumu yorumunuz ne olur ?

public class Base {
    Base doStuff(int val){ return null; }
}
class Sub extends Base {
    @Override
    private Sub doStuff(int val) // line n1
    { return null; }
}

 

Derlenir mi  ? Derlerse bile çalışır mı ?

Base sınıfı içerisindeki doStuff() metodu friendly erişim belirliyecisine sahiptir. Bunun anlamı Sub sınıfı içerisinde doStuff() ezilecekse (override) erişim belirleyesinin aynı veya daha erişlebilir olması gerekmektedir.  Erişim belirleyicileri en katıdan en erişilebilir olana doğru sıralarsak :

1 – private

2- friendly (boş ise )

3 – protected

4 – public

Bu yaklaşımla,  Sub sınıfı içerisinde doStuff() ezilecekse (override), ya friendly veya protected veya public olabilir ama private olamaz ! Olursa ne olur ? Kod derleme anında hata alır.

Kural çok açık ama neden böyle oluyor diye düşünebilirsiniz. Kodun neden derlenmediğinin arkasında “The Liskov Substitution Principle ”  olduğunu hatırlatmak isterim. Nedir Liskov prensibi? Özetle tutarlı olmayı söyler.  Yukarıdaki örnekte eğer kod derlense ve çalışsaydı, ortaya şöyle bir tutarsızlık çıkacaktı; Ben ata sınıfın doStuff() beğenmiyorum ve eziyorum ama onu kimsenin görmesini istemiyorum. Peki  o zaman neden eziyorsun (override) demezler mi ?

1 Comment
  • Posted at 03:22, 26/07/2018

    dostuff komutu bende düzgün çalışmıyor “Bad protocol request” hatası alıyorum yardım edebilir misiniz?

Post a Comment

Comment
Name
Email
Website