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

Related Posts:

  • Bài 14: Phương thức (method) trong Java Bài 14: Phương thức (method) trong Java 1, Khái niệm: Hàm hay phương thức (method) trong Java là khối lệnhthực hiện các chức năng, các hành vi xử lý của lớp lên vùng dữliệu. Trong lập trình cấu trúc, các bạ… Read More
  • Bài 11: Thời gian hệ thống trong Java Bài 11: Thời gian hệ thống trong Java 1, Tính thời gian chạy 1 đoạn lệnh trong chương trìnha, Tính thời gian theo mini giây: (10^(-3)s)Trong đối tượng System có phương thức "currentTimeMillis()", ta dùng nó để đ… Read More
  • Bài 6: Cấu trúc Switch Case trong Java! Bài 6: Cấu trúc Switch Case trong Java!  ​ Cấu trúc Switch…Case:  ​ Đơn giản, khi chúng ta cần xử lý các sự kiện liên quan tới nhiều trường hợp giá trị của biến, nếu dùng if - else nhiều thì code sẽ dài, lặp… Read More
  • Bài 13: Class trong Java (tiếp) Bài 13: Class trong Java (tiếp) Sau bài viết này, các bạn sẽ có cái nhìn toàn diện hơn về class trong 1 project Java (interface, abstract class tương tự), các bạn áp dụng để viết code sao cho dễ nhìn dễ hiểu và … Read More
  • Bài 10: Break và Continue trong Java Bài 10: Break và Continue trong Java  ​ 1, Lệnh break:Trong cấu trúc switch chúng ta dùng câu lệnh break để thoát thỏi cấu trúc switch trong cùng chứa nó. Tương tự như vậy, trong cấu trúc lặp, câu lệnh break dùng để… Read More

0 nhận xét:

Post a Comment

 

BACK TO TOP

Xuống cuối trang