THỰC HIỆN:
- Khi lớp con và lớp cha có cùng phương thức và cùng cú pháp (phương thức có tên giống nhau và có cùng các tham số truyền vào) nên phương thức của lớp con sẽ ghi đè lên phương thức của lớp cha
- Ghi đè phương thức được sử dụng để thu được tính đa hình tại thời điểm đang chạy/runtime
class Shape {
void draw() {
System.out.println("drawing...");
}
}
class Circle extends Shape {
void draw() {
System.out.println("drawing circle...");
}
}
class Triangle extends Shape {
void draw() {
System.out.println("drawing triangle...");
}
}
class Rectangle extends Shape {
void draw() {
System.out.println("drawing rectangle...");
}
}
class ViDu_DaHinh {
public static void main(String args[]) {
Shape s;
s = new Circle();
s.draw();
s = new Triangle();
s.draw();
s = new Rectangle();
s.draw();
}
}
- Lớp con ghi đè phương thức của lớp cha thì sẽ che dấu phương thức của lớp cha
- Mục đích của ghi đè là để sửa lại phương thức của lớp cha trong lớp con
- Sử dụng từ khóa super để truy cập đến phương thức đã bị ghi đè của lớp cha.- Đặc tả truy xuất của phương thức lớp con phải có độ công khai bằng hoặc hơn đặc tả truy xuất của phương thức lớp cha.
import java.util.Scanner;
public class LaoCong extends NhanVien{
int soGioLamViec;
// GETTER & SETTER
public int getSoGioLamViec() {
return soGioLamViec;
}
public void setSoGioLamViec(int soGioLamViec) {
this.soGioLamViec = soGioLamViec;
}
// CONSTRUCTOR
public LaoCong(int soGioLamViec, String tenNhanVien, double mucLuong) {
super(tenNhanVien, mucLuong);
this.soGioLamViec = soGioLamViec;
}
}
public double getThuNhap(){
return mucLuong;
}
@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();
}
// phan 2
@Override
public double getThuNhap() {
return super.getMucLuong() + getPhuCapChucVu();
}
// GHI DE
@Override
public void nhapDuLieu() {
Scanner sc = new Scanner(System.in);
System.out.print("Ho ten LC: ");
tenNhanVien = sc.nextLine();
System.out.print("So gio lam viec: ");
soGioLamViec = sc.nextInt();
}
@Override
public double getThuNhap() {
return getSoGioLamViec() * 50000;
}
@Override
void hienThi() {
System.out.println("- Ho Ten: " + getTenNhanVien());
System.out.println("- Muc Luong: " + getThuNhap());
}
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;
}
}
// phan 2 - THU NHAP MAC DINH SE LA MUC LUONG
public double getThuNhap(){
return mucLuong;
}
}
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();
}
// phan 2
@Override
public double getThuNhap() {
return super.getMucLuong() + getPhuCapChucVu();
}
}
import java.util.Scanner;
public class LaoCong extends NhanVien{
int soGioLamViec;
// GETTER & SETTER
public int getSoGioLamViec() {
return soGioLamViec;
}
public void setSoGioLamViec(int soGioLamViec) {
this.soGioLamViec = soGioLamViec;
}
// CONSTRUCTOR
public LaoCong(int soGioLamViec, String tenNhanVien, double mucLuong) {
super(tenNhanVien, mucLuong);
this.soGioLamViec = soGioLamViec;
}
// GHI DE
@Override
public void nhapDuLieu() {
Scanner sc = new Scanner(System.in);
System.out.print("Ho ten LC: ");
tenNhanVien = sc.nextLine();
System.out.print("So gio lam viec: ");
soGioLamViec = sc.nextInt();
}
@Override
public double getThuNhap() {
return getSoGioLamViec() * 50000;
}
@Override
void hienThi() {
System.out.println("- Ho Ten: " + getTenNhanVien());
System.out.println("- Muc Luong: " + getThuNhap());
}
}
public class Main_DaHinh {
public static void main(String[] args) {
NhanVien nv1 = new NhanVien("Van Cong Khanh", 1500000);
nv1.hienThi();
TruongPhong tp1 = new TruongPhong("Ten ong TRUONG PHONG", 2000000, 500000);
tp1.hienThi();
LaoCong lc1 = new LaoCong(50, "Tran Van Ku Teo", 50000);
lc1.hienThi();
}
}
2. Bài tập:
Hướng dẫn:
- Vì chưa biết sinh viên này học những môn nào nên chưa tính được điểm vì vậy phương thức getDiem() phải là phương thức trừu tượng
- Chú ý lớp SinhVienPoly phải là lớp trừu tượng vì có phương thức getDiem() là phương thức trừu tượng
- Phương thức getHocLuc() được viết bình thường vẫn sử dụng phương thức getDiem() để lấy điểm của sinh viên mặc dù hiện tại vẫn chưa biết điểm được tính thế nào. Học lực được tính như sau
o Yếu: điểm < 5
o Trung bình: 5 <= điểm < 6.5
o Khá: 6.5 <= điểm < 7.5
o Giỏi: 7.5 <= điểm < 9
o Xuất sắc: điểm >= 9
Xong!