/*auto readmore*/ /*auto readmore*/ /* an hien script*/ // an hien password /*an hien ma chuong trinh cong tru */ /*Scrollbox thanh cuon*/ /***Nhung CODE***/ /* dòng xanh dòng trắng */ /* https://cdnjs.com/libraries/prism lay thu vien, can vao ten file ma goi 1. copy link vao vi du:prism-python.min.js 2. ten ngon nua la python */ /*=== New posts ===*/ /*header slider*/ /*=== bai viet lien quan===*/ /*===tabcode===*/

[Tự Học Java] MOB1014-Java 1 - Bài 7 - Kế Thừa/Inheritance - P1/2

NỘI DUNG:
1. Kế thừa trong OOP Java: 
2. Bài Tập

THỰC HIỆN:

1. Kế thừa trong OOP Java: 
  • Tính kế thừa thể hiện một lớp con có thể thừa kế các thuộc tính và phương thức của lớp cha
  • Tuy nhiên chỉ truy cập các thành viên publicprotected của lớp cha
  • Truy cập mặc định {default} (không khai báo từ khóa phia trước) của lớp cha nếu lớp con và lớp cha được định nghĩa cùng gói (package)
  • KHÔNG được phép truy cập đến thành viên private của lớp cha
  • Lớp con KHÔNG kế thừa các hàm tạo (constructor) của lớp cha

Sử dụng từ khóa:
  • extends để kế thừa
Cú pháp trong Java:
public class TenLopCon extends TenLopCha{
    // Khai bao..
    // ...
}



  • super để truy cập đến các thành viên của lớp cha. Ví dụsuper(tenNhanVien, mucLuong);
  • super để truy cập đến các constructor của lớp cha. Ví dụsuper.hienThi();

Ví dụ cụ thể:
  • Tạo một lớp/class có tên NhanVien với các yêu cầu:
- Các trường/thuộc tính: tenNhanVien, mucLuong
- Thiết lập phương thức getter, setter;
- Khởi tạo constructor
- Khởi tạo hàm public nhapDuLieu , hienThi (mặc định, không khai báo gì), private thueThuNhap
Code:
import java.util.Scanner;

public class NhanVien {
    public String tenNhanVien;
    protected  double mucLuong;

    // GETTER & SETTER
    public String getTenNhanVien() {
        return tenNhanVien;
    }

    public double getMucLuong() {
        return mucLuong;
    }

    public void setTenNhanVien(String tenNhanVien) {
        this.tenNhanVien = tenNhanVien;
    }

    public void setMucLuong(double mucLuong) {
        this.mucLuong = mucLuong;
    }

    // CONSTRUCTOR
    public NhanVien(String tenNhanVien, double mucLuong) {
        this.tenNhanVien = tenNhanVien;
        this.mucLuong = mucLuong;
    }
    
    // NHAP LIEU, PUBLIC
    public void nhapDuLieu(){
        Scanner sc = new Scanner(System.in);
        System.out.print("Ho ten: ");
        tenNhanVien = sc.nextLine();
        System.out.print("Luong: ");
        mucLuong = sc.nextDouble();
    }
    
    // IN/HIEN THI, MAC DINH
    void hienThi(){
        System.out.println("- Ho Ten: " + tenNhanVien);
        System.out.println("- Muc Luong: " + mucLuong);
    }
    
    // PRIVATE, lop con se khong duoc ke thua
    private double thueThuNhap(){
        if(mucLuong < 5000000){
            return 0;
        }else{
            return (mucLuong - 5000000)*10/100;
        }
    }
}
  • Tạo TruongPhong kế thừa từ lớp NhanVien:
- Các thuộc tính hiện có của lớp NhanVien và thêm phương thức phuCapChucVu
- Khởi tạo constructor cho lớp TruongPhong (kế thừa tenNhanVien, mucLuong)
- Khởi tạo phương thức hienThi, nhapDuLieu (kế thừa từ lớp NhanVien và bổ sung thuộc tính phuCapChucVu sao cho thích hợp với từng hàm)
Code:
import java.util.Scanner;

public class TruongPhong extends NhanVien{
    public double phuCapChucVu;

    // GETTER & SETTER
    public double getPhuCapChucVu() {
        return phuCapChucVu;
    }

    public void setPhuCapChucVu(double phuCapChucVu) {
        this.phuCapChucVu = phuCapChucVu;
    }

    // CO THE DUNG CONSTRUCTOR TU DONG DE TAO RA
    public TruongPhong( String tenNhanVien, double mucLuong, double phuCapChucVu) {
        super(tenNhanVien, mucLuong);
        this.phuCapChucVu = phuCapChucVu;
    }
    
    @Override
    public void hienThi(){
        super.hienThi(); // goi phuong thuc hien thi tu lop cha-NhanVien
        
        System.out.println("- Phu Cap Chuc Vu: " + phuCapChucVu);
    }
      
    @Override
    public void nhapDuLieu(){
        Scanner sc = new Scanner(System.in);
        super.nhapDuLieu(); 
        
        System.out.print("Phu Cap Chuc Vu:");
        phuCapChucVu = sc.nextDouble();
    }
}
  • Từ hàm main truy cập vào class/lớp để tạo mới, nhập liệu và hiển thị thông tin trưởng phòng vừa nhập
Code:
public class Main {
    public static void main(String[] args) {
        TruongPhong tp1 = new TruongPhong("Tony Teo", 1200, 300);
        tp1.hienThi();
        
        tp1.nhapDuLieu();
        tp1.hienThi();
    }
}

2. Bài Tập

7.1.2.1
  • Xây dựng lớp ChuNhat gồm 2 thuộc tính là chieuRong và chieuDai và các phương thức getChuVi() và getDienTich() để tính chu vi và diện tích. Phương thức hienThi() sẽ xuất ra màn hình chiều rộng, chiều dài, diện tích và chu vi.
  • Xây dựng lớp HinhVuong kế thừa từ lớp ChuNhat và ghi đè phương thức hienThi() để xuất thông tin cạnh, diện tích và chu vi.
  • Viết chương trình nhập 2 hình chữ nhật và một hình vuông sau đó xuất ra màn hình.

Hướng dẫn:
Lớp ChuNhat
public class ChuNhat {
    public int chieuDai;
    public int chieuRong;

    // SETTER & GETTER
    public int getChieuDai() {
        return chieuDai;
    }

    public int getChieuRong() {
        return chieuRong;
    }

    public void setChieuDai(int chieuDai) {
        this.chieuDai = chieuDai;
    }

    public void setChieuRong(int chieuRong) {
        this.chieuRong = chieuRong;
    }

    // CONSTRUCTOR
    public ChuNhat() {
    }
    
    public ChuNhat(int chieuDai, int chieuRong) {
        this.chieuDai = chieuDai;
        this.chieuRong = chieuRong;
    }
    
    
    // XAY DUNG PHUONG THUC
    public int getDienTich(){
        return getChieuDai() * getChieuRong();
    }
    
    public int getChuVi(){
        return (getChieuDai() + getChieuRong())* 2;
    }
      
    public void hienThi(){
        System.out.printf("Chieu dai\t: %d%n", getChieuDai());
        System.out.printf("Chieu rong\t: %d%n", getChieuRong());
        System.out.printf("Chu vi\t\t: %d%n", getChuVi());
        System.out.printf("Dien tich\t: %d%n", getDienTich());
    }
}

Lớp HinhVuong (nhớ getter và setter cho biến canh ở lớp kế thừa nhé!)
public class HinhVuong extends ChuNhat{
    private int canh;

    // GETTER & SETTER
    public int getCanh() {
        return canh;
    }

    public void setCanh(int canh) {
        this.canh = canh;
    }
    
    // CONSTRUCTOR
    public HinhVuong() {
    }

    public HinhVuong(int canh) {
        super(canh, canh);
        this.canh = canh;
    }

    @Override
    public void hienThi() {
        System.out.printf("Canh\t\t: %d%n", getCanh());
        System.out.printf("Chu vi\t\t: %d%n", getChuVi());
        System.out.printf("Dien tich\t: %d%n", getDienTich());
    }
    
}

Hàm main
public class Main_7121 {
    public static void main(String[] args) {
        ChuNhat cn1 = new ChuNhat(5, 3);
        cn1.hienThi();
        
        HinhVuong hv1 = new HinhVuong(7);
        hv1.hienThi();
    }
}

Xong!

No comments:

Post a Comment

/*header slide*/