01/10/2018, 14:22
Tính đa hình trong java
Không tìm thấy thuộc tính major đâu?
class People {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Teacher extends People{
String major;
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
}
ublic class TestProject {
public static void main(String[] args) {
People p;
p = new Teacher();
p.setName(); // Cái này thì thấy
p.setMajor(); // Cái này không thấy
}
}
}
Bài liên quan
chưa định nghĩa mà đòi thấy…
Bạn khai báo kiểu reference là People thì nó chỉ quan tâm các method, thuộc tính được khai báo trong People thôi
Vậy phải làm sao mới thấy được phương thức setMajor. Vì có yêu cầu đa hình
nếu vậy chắc phải hard code
đoạn code trên mục đích tạm thời thay đổi kiểu reference thành Teacher rồi mới truy cập được method setMajor của class Teacher
Cái này nó chỉ có ơr class Teacher thì đâu gọi là đa hình. Bạn declare p là People mà lại gọi method của Teacher thì ko có là đúng rồi.
Bạn đang “code to class” thay vì “code to interface” thì ko thể hiện được tính đa hình.
Update: VD: Khi bạn đang trong hình dạng người lớn nhưng đăng ký với công an rằng “tô là trẻ con” thì người ta ko cho bạn “làm chuyện người lớn”.
Cái này là về upcast, downcast trong java, đa hình đâu.-.-
Cái của em là đang downcast từ pepole xuông teacher nên phải chỉ rỏ kiểu như @huynhtinh nói.
upcast thì không cần chỉ rõ kiểu
cái đó chỉ là kế thừa, ko phải đa hình
muốn thể hiện được tính đa hình thì trong class Teacher cứ re-declaration methd getName là được rồi
ví dụ: trong
public String getName() {
return "Teacher " + name;
}
khi đó nếu đối tượng là People gọi getName thì trả về [name]
còn đối tượng Teacher gọi getName thì trả về “Teacher [name]”
đó là đa hình, 1 method nhưng nhiều định nghĩa
Xét về ngữ nghĩa cũng không đúng vì đâu phải ai cũng có
major
thêm tên họ ID gì là đc.Mình định demo tý code mà thấy trên này viết chi tiết lắm rồi nên bạn tham khảo để hiểu rõ hơn về đa hình nhé.
Việc bạn thực hiện:
People p = new Teacher();
Đây là cơ chế Upcasting trong java. Các phương thức setMajor(), getMajor() không hề tồn tại trong đối tượng People . Nếu bạn muốn gọi phương thức setMajor() bạn phải khởi tạo trực tiếp đối tượng Teacher:
Teacher t = new Teacher();
Bạn có thể xem thêm bài viết bên dưới để hiểu rõ hơn về tính đa hình trong Java:
GP Coder – 5 Nov 17
Tính đa hình (Polymorphism) trong Java - GP Coder (Lập trình Java)
Hướng dẫn lập trình Java, Design Pattern, Spring, JSF, Primefaces, Collection, Multi-thread, Webservice, SQL, Report, Apache POI.