tôi có ba lớp (Số sẽ được thể phát triển trong tương lai):danh sách Overriding và thực hành Java
public inteface Base{ }
public class Select implements Base{ }
public class Ast implements Base{ }
public class Gt implements Base{ }
Tôi cũng cần trong một lớp học List
BaseList extends ArrayList<Base>{
public boolean add(Base b){
throw new UnsupportedOperationException("You should use add%ConcereteBaseType% method instead");
}
public boolean add(Select s){ }
public boolean add(Ast a){ }
public boolean add(Gt g){ }
}
Lý do tại sao tôi đã làm đây là một thực tế rằng tôi không muốn bất cứ ai để thêm các yếu tố thông qua một con trỏ đến Base
. Trong tình huống cụ thể của tôi, điều này sẽ không an toàn.
Nhưng bất lợi là nó sẽ chỉ được phát hiện khi chạy.
Tôi cũng cần phải lặp qua danh sách.
Có thực hành tốt để làm những việc như vậy không?
Có nhiều khả năng tất cả điều này là lạm dụng thừa kế. Tôi muốn đặt cược rằng bất cứ điều gì bạn có trong tâm trí có thể được thực hiện với thành phần. – duffymo
@duffymo Có lẽ bạn có thể đưa ra một ví dụ để hiểu những điều bạn đang nói về? –
"Thành phần" có nghĩa là có một 'ArrayList' là một trường thay vì mở rộng một' ArrayList'. (Xem câu trả lời của tôi hoặc của thành viên cho mã ví dụ.) – aioobe