Somut yöntemlerin geçersiz kılınmasının bir kod kokusu olduğu doğru mu? Çünkü somut yöntemleri geçersiz kılmanız gerekiyorsa bence:
public class A{
public void a(){
}
}
public class B extends A{
@Override
public void a(){
}
}
olarak yeniden yazılabilir
public interface A{
public void a();
}
public class ConcreteA implements A{
public void a();
}
public class B implements A{
public void a(){
}
}
ve eğer B A'daki () işaretini tekrar kullanmak istiyorsa, şu şekilde yeniden yazılabilir:
public class B implements A{
public ConcreteA concreteA;
public void a(){
concreteA.a();
}
}
Bu yöntem geçersiz kılmak için miras gerektirmeyen, bu doğru mu?
virtual
geçersiz kılmaları desteklemek için anahtar kelimeyi kullanmanız gerekir . Bu yüzden konu, dilin özellikleri tarafından daha fazla (ya da daha az) belirsiz hale getirildi.
final
Değiştiricinin bu gibi durumlar için tam olarak var olduğunu hissediyorum . Yöntemin davranışı geçersiz kılmak için tasarlanmamışsa, o zaman işaretleyin final
. Aksi takdirde, geliştiricilerin geçersiz kılmayı seçebileceklerini bekleyin.