14 June 2016

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

overloading-vs-overriding
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

Untitled ​

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 tenho;

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

class 
tenNguoiNuocNgoai extends tenNguoiViet {

    @
Override
    
public 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 toanlyhoa;

    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 {

    @
Override
    
public 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());

    }
}

Tham khảo thêm 2 video bên blog StudyAndShare:




Nguồn : Android.vn

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang