Class Parent:
class Parent {
int age;
public Parent() {
age = 50;
}
}
Class Child:
class Child extends Parent {
public Child() {
age = 10;
}
}
Cách trên có một vấn đề là khi viết như sau thì giá trị khởi tạo mặc định của class con hoặc cha có thể bị bỏ qua nếu làm việc team và không thống nhất spec:
class Child extends Parent {
int height;
public Child(int height) {
this.height = height;
}
}
Thông thường mình sẽ code như sau không biết có hợp lý không:
Class Parent:
class Parent {
int age;
String location;
public Parent() {
init();
}
private void init {
age = 50;
location = "Ha Noi";
}
}
Class Child:
class Child extends Parent {
int height;
public Child() {
init();
}
public Child(int height) {
init();
this.height = height;
}
private void init() {
age = 10;
location = "Ha Noi";
}
}
Tuy nhiên cách trên lại vấp phải một vấn đề là mỗi lần sửa giá trị location thì phải nhớ đến cả cha lẫn con. Quên mất là degrade debug lỗi lòi mắt.
Class Parent:
class Parent {
public static final int DEFAULT_PARENT_AGE = 50;
public static final String DEFAULT_PARENT_LOCATION = "Ha Noi";
int age;
String location;
public Parent() {
init();
}
private void init {
age = DEFAULT_PARENT_AGE;
location = DEFAULT_PARENT_LOCATION;
}
}
Class Child:
class Child extends Parent {
public static final int DEFAULT_CHILD_AGE = 10;
int height;
public Child() {
init();
}
public Child(int height) {
init();
this.height = height;
}
private void init() {
age = DEFAULT_CHILD_AGE;
location = DEFAULT_PARENT_LOCATION;
}
}
Hi vọng có ích.