30/09/2018, 18:47
đố vui lập trình 1
OOP- OOD
Class Person{
set()
set(Person)
}
Class Group Extends Person{
set(Person person)
}
Class Student Extends Group{
set(Student Student)
}
Public static void main{
Person person = new Student();
person.set(Student) // Giờ mình đổi thế này, đố các bạn là set của class nào? Giải thích vì sao?
}
Bài liên quan
Vẫn là set method của Person thôi.
Lúc này person vẫn là object của Person, và method set() trong class Person không có tham số thì mới tương thích, mà kể cả method của những class con không có tham số thì person cũng không thể tìm thấy method set của các class con được.
set() của Person…
Mình nghỉ là của Student do = new Student(); đã khai báo lớp con rồi, trong lớp con có set tái định nghĩa lại từ cha nó rồi, nên gọi mặt định luôn là lớp con.
Person vì person gọi hàm set() không có tham số.
person là instance của lớp Student nhưng mà lại gọi được hàm set() của lớp cha vì , person được khỏi tạo là một object có kiểu Person .
Phương thức set() không có tham số chỉ có Person có nên không có bất kì phương thức nào Override lại nó cả…
Cái này vượt qua phạm trù của OOP rồi, đây là kiến thức OOD
Mình có thấy design gì trong này đâu nhỉ? Vẫn chỉ là kiến thức OOP căn bản thôi mà…
à quên để về tham số
bạn nghĩ gì khi bạn new 1 object sau, Object a = new String(“asdas”);
a.toString(); theo bạn thì nó sẽ là hàm toString của Object hay của String.
a kiểu Object làm sao để gán cho 1 String được.
new String(“asdas”) trả về 1 String mà.
em cũng nghĩ là của Person vì không có tham số
Theo mình là của Person, các hàm ‘set’ đó là các hàm khác nhau (tham số không giống nhau).
bạn đã bao giờ thử chưa mà biết k đc, trong Java Object là class cha của tất cả class do đó k có lí do gì mà Object a = new String() lại không được cả, ở đây mình quote lại câu trả lời của b vì bạn chưa hoàn toàn hiểu hết vấn đề của OOP:
“person là instance của lớp Student nhưng mà lại gọi được hàm set() của
lớp cha vì , person được khỏi tạo là một object có kiểu Person”
quan niệm này là sai hoàn toàn vì person là 1 Object kiểu Person, đc khởi tạo là instance lớp Student, sở dĩ nó gọi hàm set() của lớp cha vì lớp Student là con của lớp cha nên được kế thừa method set() chứ k phải là nó là kiểu Person, vì nó vẫn là kiểu Student extends Person, do đó mới có TH nếu lớp Student override lại method set() thì nó sẽ gọi method set() của lớp Student chứ k gọi method của lớp Person. Bạn đang hiểu sai bản chất về tính đa hình và tính trừu tượng trong OOP rồi đấy
Cảm ơn bạn rất nhiều , t sẽ xem laị chỗ này
Có 1 câu nói rất hay như thế này.
ông bố được 1 đám cưới mời đi ăn cỗ, nhưng do bận không đi được, Thằng con đi thay.
Vậy lúc này thằng con ngồi vào chỗ của ông bố hay chỗ của thằng con?