Bài 18: Ghi đè phương thức (Overriding Method) trong Java

Xem trong 'Làng Tin Tức' đăng bởi Trangcct, 30/3/15, [ Mã Tin: 18173 ] [254 lượt xem - 0 bình luận]

  1. SĐT :
    01xxxxxxxx
    Địa Chỉ :
    Thăng Long- Kinh Môn -Hải Dương
    Gửi tin nhắn
    [​IMG]


    1, Khái niệm ghi đè – override:


    - Đó là khi phương thức đã xuất hiện ở lớp cha và xuất hiện tiếp ở lớp con.

    - Khi đối tượng thuộc lớp con gọi phương thức thì sẽ chọn lựa và chạy theo phương thức trong lớp con.

    - Nếu lớp con không có phương thức đó thì mới lên kiếm ở lớp cha để chạy.

    - Phương thức ghi đè có cùng tên, cùng tham số truyền vào, cùng kiểu giá trị trả về với phương thức ở lớp cha!

    - Ghi đè là hình thức đa hình (polymorphism) trong quá trình thực thi (Runtime)


    Ở bài trước, ta biết đến cách nạp chồng phương thức (Overloading method), nó cùng nằm trong 1 lớp. Còn ghi đè ở đây, là sau khi lớp con kế thừa lớp cha của nó, ta chỉnh lại 1 phương thức nào đó cần thiết, tức là ghi đè để đạt được theo ý muốn!


    2, Ví dụ:


    Ví dụ 1: Sự khác nhau giữa Override và Overload


    [​IMG]


    Ví dụ 2:

    - Lớp "tên người Việt" gồm 2 thuộc tính: "họ" và "tên" và phương thức hiển thị tên đầy đủ theo thứ tự họ + tên

    - Lớp "tên người nước ngoài" kế thừa từ lớp "tên người Việt" , phương thức hiển thị tên đầy đủ lại theo thứ tự tên + họ

    - Như vậy, sau khi kế thừa ta chỉ cần ghi đè lại phương thức hiển thị là xong!

    Code:

    PHP:

    package javademoandroidvn;

    class tenNguoiViet {

    public String ten, ho;

    public void show() {System.out.println("Tên đầy đủ là: " + this.ho + " "+this.ten);
    }
    }

    class tenNguoiNuocNgoai extends tenNguoiViet {

    @Overridepublic void show() {System.out.println("Full name: " + this.ten + " " + this.ho);
    }
    }

    public class JavaDemoAndroidVn {

    public static void main(String[] args) {tenNguoiViet nguoiV = new tenNguoiViet();nguoiV.ho = "Nguyen";nguoiV.ten = "Hung";nguoiV.show();
    tenNguoiNuocNgoai nguoiNN = new tenNguoiNuocNgoai();nguoiNN.ho = "Nguyen";nguoiNN.ten = "Hung";nguoiNN.show();
    }
    }

    Ví dụ 3:

    - Lớp HocSinh gồm các thuộc tính: hoTen, lop, toan, ly, hoa và phương thức điểm trung bình là trung bình cộng 3 môn

    - Lớp HocSinhChuyenToan kế thừa từ phương thức HocSinh, nhưng khi tính điểm trung bình nhân đôi hệ số môn Toán rồi cộng tất cả, chia cho 4. Như vậy cần ghi đè phương thức điểm trung bình ở lớp HocSinhChuyenToan

    Code:

    PHP:

    package javademoandroidvn;

    class HocSinh {

    private String hoTen;
    private String lop;
    private float toan, ly, hoa;

    public String getHoTen() {
    return hoTen;
    }

    public void setHoTen(String hoTen) {this.hoTen = hoTen;
    }

    public String getLop() {
    return lop;
    }

    public void setLop(String lop) {this.lop = lop;
    }

    public float getToan() {
    return toan;
    }

    public void setToan(float toan) {this.toan = toan;
    }

    public float getLy() {
    return ly;
    }

    public void setLy(float ly) {this.ly = ly;
    }

    public float getHoa() {
    return hoa;
    }

    public void setHoa(float hoa) {this.hoa = hoa;
    }

    public float diemTrungBinh() {
    return (float) (this.toan + this.ly + this.hoa) / 3;
    }
    }

    class HocSinhChuyenToan extends HocSinh {

    @Overridepublic float diemTrungBinh() {
    return (float) (this.getHoa() + this.getLy() + this.getToan() * 2) / 4;
    }
    }

    public class JavaDemoAndroidVn {

    public static void main(String[] args) {HocSinh a = new HocSinh();a.setHoTen("Vu Van Tuong");a.setLop("At7a");a.setToan(10.0f);a.setLy(9.0f);a.setHoa(8.0f);System.out.println("Diem trung binh cua hoc sinh a la: " + a.diemTrungBinh());
    HocSinhChuyenToan b = new HocSinhChuyenToan();b.setHoTen("Nguyen Van B");b.setToan(9.0f);b.setHoa(7.0f);b.setLy(8.0f);System.out.println("Diem trung binh cua hoc sinh chuyen Toan b la: " + b.diemTrungBinh());

    }
    }
    hoc lap trinh java, hoc lap trinh android