Czy to prawda, że nadrzędnymi konkretnymi metodami jest zapach kodu? Ponieważ uważam, że jeśli chcesz zastąpić konkretne metody:
public class A{
public void a(){
}
}
public class B extends A{
@Override
public void a(){
}
}
można go przepisać jako
public interface A{
public void a();
}
public class ConcreteA implements A{
public void a();
}
public class B implements A{
public void a(){
}
}
a jeśli B chce ponownie użyć a () w A, można go przepisać jako:
public class B implements A{
public ConcreteA concreteA;
public void a(){
concreteA.a();
}
}
który nie wymaga dziedziczenia, aby zastąpić metodę, czy to prawda?
virtual
słowa kluczowego do obsługi zastąpień. Tak więc problem jest bardziej (lub mniej) niejednoznaczny ze względu na szczegóły języka.
final
modyfikator istnieje dokładnie w takich sytuacjach. Jeśli zachowanie metody jest takie, że nie jest przeznaczone do zastąpienia, oznacz ją jako final
. W przeciwnym razie spodziewaj się, że programiści mogą go zastąpić.