cuối tuần trước tôi đã đọc một số nội dung về giao diện, lớp trừu tượng và nguyên tắc thiết kế. Cuối cùng tôi đã có một chút bối rối và tôi đã cố gắng để xây dựng một ví dụ về những gì tôi đã học được (hoặc nghĩ rằng tôi đã học được).Lớp mở rộng Thực hiện lớp trừu tượng Giao diện
Đây là ví dụ của tôi: Trường hợp sẽ là mô hình hóa một lớp chứa thông tin về cây cối.
Trước hết tôi sẽ thực hiện một giao diện:
public interface Tree{
public void grow();
}
Giao diện nắm giữ tất cả các phương pháp đó phải được thực hiện bởi những cây bê tông. Cho đến nay rất tốt nhưng cây như vậy cần một số thuộc tính (biến) được chia sẻ trên tất cả các họ cây. Vì mục đích đó tôi sẽ sử dụng một lớp trừu tượng:
public abstract class AbstractTree implements Tree {
private String barColor;
private int maxHeight;
private boolean isEvergreen;
}
Đây có phải là cách đúng hay tôi không thể thực hiện một loại hợp đồng về thuộc tính (biến) phải ở trong các lớp khác?
Sau khi phần thuộc tính được thực hiện, tôi muốn có 3 loại cây.
- Oak
- Maple
- Spruce
Vì vậy, mỗi người trong số những cây "tpyes" có thể có các biến cá nhân.
public class OakTreeImpl extends AbstractTree{
private String barColor;
private int maxHeight;
private boolean isEvergreen;
private String foo;
@Override
public void grow() {
}
}
Liệu phương pháp này âm thanh ngay trong một thiết kế nguyên tắc cách hướng đối tượng hay am i hoàn toàn sai với nó?
AbstractTree nên sử dụng trường 'được bảo vệ' để bạn không cần phải redeclare chúng trong quá trình triển khai –
tại sao không chỉ sử dụng lớp trừu tượng? – VedX
Tôi tuyên bố chúng như được bảo vệ trong tóm tắt và loại bỏ chúng khỏi lớp Impl? Và tôi vẫn có thể truy cập (get/set) các giá trị của các biến ngay cả khi tôi không "nhìn thấy" chúng trực tiếp trong lớp? – user2742409