Cách sử dụng 2 phương thức cùng tên

Xin chào !
Em đang tự học java, đến đoạn overloadoverride em bị khó hiểu ở chỗ nếu 2 phương thức cùng tên cùng tham số và kiểu (overriding) thì khi gọi phương thức kiểu tên_đối_tượng.tên_phương_thức() như m1m2 trong ảnh thì làm sao biết nó lấy
start() ở chỗ nào ạ ?

class Machine {
    public void start() {
        System.out.println("Starting...");
    }
}

class Program {
    public static void main(String[] args) {
        Machine m1 = new Machine() {
            @Override public void start() {
                System.out.println("Wooooo");
            }
        };
        Machine m2 = new Machine();
        m1.start(); // kết quả ra "Woooo"
        m2.start(); // kết quả ra "Starting..."
    }
}

Bản thân đối tượng sẽ trỏ đến hàm của nó trong bảng vtable :smiley:

p/s: sao lại có “monkey patching” hay vậy :smiley:

2 Likes

m1 đã override lại phương thức của Machine rồi, bạn gọi m1.start() thì nó không còn là Machine::start nữa

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?