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?
}
... viết 20:59 ngày 30/09/2018

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.

Truong Pham viết 20:48 ngày 30/09/2018

set() của Person…

Đạt Đỗ viết 20:49 ngày 30/09/2018

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.

Thành viết 20:47 ngày 30/09/2018

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ả…

Đỗ Trung Quân viết 20:55 ngày 30/09/2018

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à…

Đạt Đỗ viết 20:56 ngày 30/09/2018

à quên để về tham số

Quân viết 20:50 ngày 30/09/2018

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.

Thành viết 21:01 ngày 30/09/2018

a kiểu Object làm sao để gán cho 1 String được.
new String(“asdas”) trả về 1 String mà.

time viết 21:00 ngày 30/09/2018

em cũng nghĩ là của Person vì không có tham số

明玉 viết 21:03 ngày 30/09/2018

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).

Quân viết 20:48 ngày 30/09/2018

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

Thành viết 20:54 ngày 30/09/2018

Cảm ơn bạn rất nhiều , t sẽ xem laị chỗ này

Đỗ Trung Quân viết 21:02 ngày 30/09/2018

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?

Bài liên quan
0