มันเป็นความจริงหรือไม่ที่วิธีการที่เป็นรูปธรรมที่สำคัญคือกลิ่นรหัส? เพราะฉันคิดว่าถ้าคุณต้องการแทนที่วิธีที่เป็นรูปธรรม:
public class A{
    public void a(){
    }
}
public class B extends A{
    @Override
    public void a(){
    }
}มันสามารถเขียนใหม่เป็น
public interface A{
    public void a();
}
public class ConcreteA implements A{
    public void a();
}
public class B implements A{
    public void a(){
    }
}และถ้า B ต้องการนำมาใช้ใหม่ () ใน A มันสามารถเขียนใหม่เป็น:
public class B implements A{
    public ConcreteA concreteA;
    public void a(){
        concreteA.a();
    }
}ซึ่งไม่ต้องการการสืบทอดเพื่อแทนที่เมธอดเป็นจริงหรือไม่?
virtualคำหลักเพื่อสนับสนุนการแทนที่ ดังนั้นปัญหานี้เกิดขึ้นมาก (หรือน้อยกว่า) คลุมเครือโดยรายละเอียดของภาษา
                finalตัวแก้ไขมีอยู่จริงสำหรับสถานการณ์เช่นนี้ finalหากลักษณะการทำงานของวิธีการที่เป็นเช่นนั้นมันไม่ได้ออกแบบมาเพื่อแทนที่แล้วทำเครื่องหมายว่า มิฉะนั้นคาดว่านักพัฒนาซอฟต์แวร์อาจเลือกที่จะแทนที่