Khi bạn ghi đè phương thức, bạn phải giữ chữ ký của phương thức và không thể giảm khả năng hiển thị của phương thức đó. Bây giờ tôi đã thử những gì vui vẻ khi tôi làm điều này với các thuộc tính. Tôi đã rất ngạc nhiên - IT WORKS! Nhìn bản thân:Ghi đè các thuộc tính
public class A {
public Integer myAttribute;
}
public class B extends A {
public String myAttribute;
}
public class Main {
public static void main(String[] args) {
B b = new B();
b.myAttribute = "myString";
((A) b).myAttribute = 1337;
System.out.println(b.myAttribute);
System.out.println(((A)b).myAttribute);
}
}
Vì vậy, chúng ta có thể viết một thuộc tính trong một lớp con với tên attibute giống như trong lớp cha, nhưng bạn có thể sử dụng tầm nhìn khác nhau (sửa đổi) và loại. Vì vậy, tôi sẽ nói rằng các thuộc tính trong superclass và subclass gần như hoàn toàn độc lập với nhau.
Bây giờ nếu bạn thực sự sử dụng cùng một tên thuộc tính trong lớp cha và lớp con, bạn ẩn thuộc tính của lớp cha một cách hiệu quả. Khi truy cập thuộc tính bằng cách sử dụng lớp con, bạn sẽ nhận được thuộc tính của lớp con. Nhưng thuộc tính của siêu lớp cũng ở đó! Bạn phải thực hiện một diễn viên để truy cập thuộc tính của lớp cha từ bên ngoài. Từ bên trong từ khóa "siêu" phải hữu ích.
Câu hỏi 1: Về cơ bản, bạn có hai thuộc tính khác nhau có cùng tên. Điều này không vi phạm LSP?
Tại sao tôi đến chi tiết này là: Tôi đang thử nghiệm với một khuôn khổ bền vững tự viết. Tôi muốn đọc toàn bộ trạng thái bên trong của một đối tượng và duy trì trạng thái đó. Tôi đọc tất cả các giá trị của thuộc tính thông qua phản xạ, bắt đầu từ loại con và di chuyển qua các siêu lớp. Bây giờ nếu có hai thuộc tính có cùng tên trong lớp cha và lớp con, tôi phải nhớ lớp khai báo thuộc tính để có thể ánh xạ các giá trị thuộc tính tới đúng thuộc tính và khôi phục trạng thái của đối tượng.
Câu hỏi 2: Bất kỳ ý tưởng nào khác về cách giải quyết chi tiết này? Câu hỏi 3: Các khung công tác bền vững khác xử lý chi tiết này như thế nào?
Tôi chưa bao giờ thấy chi tiết này đang được sử dụng. Có thể viết hai thuộc tính có cùng tên là một chút xấu xí, nhưng có thể và bất kỳ khung kiên trì nào cũng có thể phải đối mặt với nó. Có thể có những tình huống mà kỹ thuật này có thể hữu ích.
Tạm dừng trước.
Thx cho tất cả người trả lời. – anonymous