Refused bequest là gì?

Noun Programming

Bạn có một lớp con (subclass), kế thừa từ lớp cha (parent class), nhưng lớp con không cần tất cả các hành vi do lớp cha cung cấp. Do đó, lớp con từ chối một số hành vi (bequest) của lớp cha.

Giả sử chúng ta có một số lớp (class) để tính thuế của một người. Chúng ta có thể có một lớp tính thuế Government:


class Government {
    protected double computeBaseTax() { //... }

    protected double addPersonalTax(double tax) { //... }

    public double getTax() {
        double tax = computeBaseTax();
        return addPersonalTax(tax);
    }
}

Sau đó, chúng ta có thể có một lớp tính toán số tiền mà một công ty phải trả dưới dạng thuế. Vì bất kỳ lý do gì, chúng ta nhận ra rằng lớp này có thể sử dụng lại phương thức addPersonalTax, nhưng không phải computeBaseTax (). Chúng ta quyết định rằng lớp Company sẽ kế thừa từ Government.


class Company extends Government {
    private double computeInitialTax() { //... }

    @Override 
    public double getTax() {
        double tax = computeInitialTax();
        return addPersonalTax(tax);
    }
}

Refused Bequest là một code smell xảy ra khi chúng ta kế thừa từ một lớp cha và một số chức năng được cung cấp bị từ chối. Cụ thể trong ví dụ này phương thức computeBaseTax bị từ chối.

Learning English Everyday