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