Benarkah metode konkret yang utama adalah bau kode? Karena saya pikir jika Anda perlu mengganti metode konkret:
public class A{
public void a(){
}
}
public class B extends A{
@Override
public void a(){
}
}
dapat ditulis ulang sebagai
public interface A{
public void a();
}
public class ConcreteA implements A{
public void a();
}
public class B implements A{
public void a(){
}
}
dan jika B ingin menggunakan kembali a () dalam A dapat ditulis ulang sebagai:
public class B implements A{
public ConcreteA concreteA;
public void a(){
concreteA.a();
}
}
yang tidak memerlukan warisan untuk mengganti metode, apakah itu benar?
virtual
kata kunci untuk mendukung penggantian. Jadi, masalah ini dibuat lebih (atau kurang) ambigu oleh rincian bahasa.
final
pengubah ada persis untuk situasi seperti ini. Jika perilaku metode ini sedemikian rupa sehingga tidak dirancang untuk diganti, maka tandai sebagai final
. Jika tidak, harap pengembang dapat memilih untuk menimpanya.