Nếu bạn định ghi đè lên thì tôi không thấy lý do hợp lệ để giữ trạng thái tĩnh này. Tôi sẽ đề nghị sử dụng sự trừu tượng hóa (xem mã ví dụ). :
public interface Person {
public abstract String getName();
//this will be different for each person, so no need to make it concrete
public abstract void setName(String name);
}
Bây giờ chúng ta có thể thêm Bố:
public class Dad implements Person {
private String name;
public Dad(String name) {
setName(name);
}
@Override
public final String getName() {
return name;
}
@Override
public final void setName(String name) {
this.name = name;
}
}
con trai:
public class Son implements Person {
private String name;
public Son(String name) {
setName(name);
}
@Override
public final String getName() {
return name;
}
@Override
public final void setName(String name) {
this.name = name;
}
}
và bố đã gặp một người phụ nữ tốt bụng:
public class StepMom implements Person {
private String name;
public StepMom(String name) {
setName(name);
}
@Override
public final String getName() {
return name;
}
@Override
public final void setName(String name) {
this.name = name;
}
}
Hình như chúng ta có một gia đình, hãy nói cho cả thế giới biết tên của họ:
public class ConsoleGUI {
public static void main(String[] args) {
List<Person> family = new ArrayList<Person>();
family.add(new Son("Tommy"));
family.add(new StepMom("Nancy"));
family.add(new Dad("Dad"));
for (Person person : family) {
//using the getName vs printName lets the caller, in this case the
//ConsoleGUI determine versus being forced to output through the console.
System.out.print(person.getName() + " ");
System.err.print(person.getName() + " ");
JOptionPane.showMessageDialog(null, person.getName());
}
}
}
Đầu ra System.out: Tommy Nancy Dad
System.err giống như trên (chỉ có phông chữ màu đỏ)
Đầu ra JOption:
Tommy rồi
Nancy rồi
bố