1
Khi nào chúng ta cần thêm chú thích @Override vào phương thức ghi đè trong Java?
0
Đăng Quang30 đã đăng:

Trong lập trình Java khi kế thừa phương thức từ lớp cha, mình nhận thấy không có sự khác biệt khi thêm @Override vào phương thức được ghi đè ở lớp con.

class Xe {
    public void DiChuyen() {
        System.out.println("Xe dang di chuyen");
    }
}

class XeDap extends Xe {  
    @Override
    public void DiChuyen(){
        System.out.println("Xe dap dang di chuyen");
    }
}

class XeMay extends Xe {  
    // Không thêm @Override
    public void DiChuyen(){
        System.out.println("Xe may dang di chuyen");
    }
}

Cho mình hỏi mục đích của @Override để làm gì, khi không cần @Override chương trình vẫn chạy đúng vậy tại sao lại thêm @Override vào để làm gì? Cảm ơn.

thêm bình luận...
1
trungkfc02550 đã đăng:

Trong lập trình, một trong những lời khuyên mình thấy khá hữu ích đó là,

Tuyệt đối (explicit) luôn luôn tốt hơn tương đối (implicit)

Nếu bạn không thêm chú thích @Override vào phương thức ghi đè khi kế thừa ở lớp con, một số IDE sẽ warning (nhắc nhở) bạn nên thêm vào, ví dụ NetBeans IDE 8.0.2 sẽ thông báo,

Chú thích Override trong Java

Và một số lợi ích khi bạn sử dụng @Override là,

Thứ nhất, mục đích thật sự của bạn là muốn ghi đè phương thức từ lớp cha ở lớp con, không có lý do gì khiến bạn không thể thêm @Override vào cả, nó giúp cho mã nguồn của bạn thật sự rõ ràng, tuyệt đối mô tả những gì bạn muốn làm và dễ đọc hơn.

Thứ hai, lợi ích thật sự nằm ở đây, khi thêm @Override vào phương thức lớp con, trình biên dịch sẽ thật sự hiểu bạn đang muốn ghi đè phương thức nào đó từ lớp cha sang lớp con, cho nên nó sẽ kiểm tra xem phương thức đó có khớp với lớp cha không, nếu không sẽ báo lỗi ngay, lỗi có thể là bạn ghi nhầm tên phương thức hoặc sai tham số chẳng hạn.

Mình sẽ ví dụ về việc ghi nhầm tên phương thức ở lớp con, thay vì DiChuyen() mình ghi nhầm thêm chữ a thành DiChuyena().

Trường hợp sử dụng @Override sẽ báo lỗi ngay:

Lỗi nhầm tên ở phương thức ghi đè trong Java

Trường hợp không sử dụng, trình biên dịch sẽ hiểu đó là phương thức riêng của lớp XeMay trong khi bạn đang thật sự muốn ghi đè phương thức:

Không thêm Override trong ghi đè phương thức

Hope it help.

đã bổ sung 3.3 năm trước bởi
Avatar: trungkfc02 trungkfc02550

Chính xác những gì mình thắc mắc, cảm ơn ạ.

Đăng Quang 22.06.2018

Cái tuyệt đối luôn luôn tốt hơn tương đối thì cũng tùy sở thích của mỗi cá nhân thôi, nếu bạn đã từng sử dụng Ruby on Rails thì khi bạn tạo ra một class, nó sẽ tự động được sử dụng khắp nơi mà không cần phải import hay include trước khi sử dụng nữa, ưu điểm là ngắn gọn nhưng nhược điểm mình cảm thấy là khó tìm, khó theo dõi mã nguồn.

Cộng đồng 13.11.2019
thêm bình luận...
Bạn đang thắc mắc? Ghi câu hỏi của bạn và đăng ở chế độ cộng đồng (?)