Avatar
1
Nguyen An Beginner
Nguyen An Beginner
Hướng đối tượng - Tại sao phải sử dụng get và set?
Tại sao phải sử dụng get và set trong khi mình có thể để public cho thuộc tính và truy cập đến ?
  • Answer
oop
Remain: 5
1 Answer
Avatar
monkey Beginner
monkey Beginner
  1. Nếu nói là phải thì có vẻ không đúng em ạ, đó là tuỳ theo nhu cầu của em, nếu em để public thì có vấn đề gì? Ví dụ:

public class User {
    public String name;
    public String password;
}

Thực ra thì cũng chẳng có vấn đề gì quá nghiêm trọng cả, nó cũng chẳng khác gì kiểu:

public class User {
    private String name;
    private String password;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

Chỉ có điều giả sử em muốn check password trước khi set thì public field sẽ không làm được và dùng hàm sẽ tiện hơn:

public void setPassword(String password) {
    if (password == null) {
        throw new IllegalArgumentException("invalid password");
    }
    this.password = password;
}

Hoặc là khi em muốn thừa kế và em cần làm một số thao tác kiểu:

class Admin extends User {

    @Override
    public void setName(String name) {
        super.setName(name + "Admin");
    }
}

Ngoài ra thì thông qua hàm em cũng sẽ kiểm soát được nhiều thứ hơn, ví dụ em có thể đặt log hay làm gì đó ...

  1. Dù cho tương đương nhau nhưng anh vẫn thích sử dụng private getter, setter hơn vì cảm giác nó an toàn hơn (chỉ là cảm giác phi lý) và tương lai nếu cần thừa kế hay thêm các điều kiện sẽ thuận tiện hơn em ạ.
  • 1
  • Reply
Em cảm ơn anh nhiều lắm , em thực sự giải đáp được thắc mắc rồi ạ  –  Nguyen An 1664435783000
Ok em, tiếp tục hỏi em nhé  –  tvd12 1664435843000