인터페이스에 대한 나의 이해는 메소드 정의, 서명 및 상수 선언 만 포함 할 수 없다는 것입니다. 인터페이스 객체 컬렉션을 포함하는 arraylist가 있습니다. 이 경우 다음과 같이 표시됩니다.@Override toString을 인터페이스 객체의 ArrayList에 어떻게 사용합니까?
List < StoreItem> items = new ArrayList < StoreItem>();
및 STOREITEM은 다음과 같습니다 내 인터페이스 :
public interface StoreItem {
//Operations
public String getMaker();
public Patron getItemBuyer();
public Date getManufactureDate();
public String getManufacturer();
public String getProductName();
public void setItemBuyer(Patron purchase);
}
나는 새 항목을 만들고 목록에 추가하는 방법이있다. 그것은 단위 테스트에 아무런 문제가 발생하지 않는다는 점에서 잘 작동하는 것으로 보이며 어떤 예외도 잡히지 않습니다. 그러나 나는 그 자신의 눈으로 내용을보기 위해 arraylist를 인쇄하고자하는 고전적인 초보자 문제를 가지고 있으며 StoreItem의 toString 메서드를 재정의해야한다는 것을 알고 있습니다. 하지만 StoreItem은 인터페이스이며 분명히 인터페이스 내에서 이와 같은 작업을 수행하지 않습니다. 또한이 인터페이스를 구현하는 추상 클래스와 해당 추상 클래스의 세 하위 클래스가 있습니다. 이 하위 클래스 중 하나의 객체를 StoreItem으로 생성하므로이 하위 클래스 내에서 toString 대체를 시도했습니다. 나는 이것을 작동시킬 수 없다. 나는 시도 : 그것 때문에 추상 슈퍼 클래스 제품 이름에서, 좋아하지 않았다
public String toString(){
return super.productName();
}
개인이며,이 프로젝트를 위해 할 필요가있다. 나는 계속 진행하기를 원했고 어쨌든 productName을 여전히 보호할만한 것으로 바꾸기로 결정했다. 나는 여전히 목록을 인쇄 할 때 메모리 위치 (@ d9sdf83j와 같은 것)를 얻는다. 그래서 난 그렇게 다시 개인으로 설정하고 있으며, toString이 반환에 슈퍼 클래스에서 getter 메소드를 사용하도록 시도 :
public String toString(){
return super.getProductName();
}
나는 여전히 메모리 위치를 얻을. 이것이 무슨 일이 일어나고 있는지, 그리고 무엇을하려고하는지 충분히 묘사 할 수있는 코드인지는 모르겠습니다. 나는 실수가 나보다 현명한 누군가가 단지 그것을 발견하고 지적 할 수있는 초보적인 것이기를 희망하지만, 필요하다면 더 많은 코드를 추가 할 수있다. 미리 감사드립니다.
아직 작동하지 않습니다. 실제 수업을 추가하고 도움이되는지 확인하겠습니다.
public abstract class AbstractStoreItem implements StoreItem{
//attributes
private String product;
private Date manufactureDate;
private String manufacturer;
private String distibutor;
private Patron buyer;
//operations
public AbstractStoreItem(String product, String manufacturer, String distibutor, Date manufactureDate) {
this.product = product;
this.manufactureDate = manufactureDate;
this.manufacturer = manufacturer;
this.distibutor = distibutor;
}
@Override
public String toString() {
return this.product;
}
@Override
public String getManufacturer() {
// TODO Auto-generated method stub
return manufacturer;
}
@Override
public Patron getBuyer() {
// TODO Auto-generated method stub
return buyer;
}
@Override
public Date getManufactureDate() {
// TODO Auto-generated method stub
return manufacturerDate;
}
@Override
public String getDistributor() {
// TODO Auto-generated method stub
return distributor;
}
@Override
public String getProduct() {
// TODO Auto-generated method stub
return product;
}
@Override
public void setBuyer(Patron buyer) {
this.buyer= buyer;
}
}
다음은 추상 클래스의 서브 클래스입니다.
public class Widget extends AbstractStoreItem{
//attributes
private Type type;
private int unitQuantity;
//operations
public Widget(String product, String manufacturer, String distributor, Date manufactureDate, Type gearType, int unitQuantity){
super(product, manufacturer, distributor, manufactureDate);
this.type = gearType;
this.unitQuantity = unitQuantity;
}
public Type getType(){
return type;
}
public int getUnitQuantity(){
return unitQuantity;
}
@Override
public void setBuyer(Patron Buyer) {
// TODO Auto-generated method stub
}
@Override
public String toString() {
return super.getManufacturer();
}
}
toString 메소드에 무엇을 할 확실하지 : 이것은 내가 목록에 추가 해요 객체입니다.
를 인쇄 할 구현하는 클래스에
toString
를 오버라이드 (override) 할 필요가 '당신이 실제로'ArrayList'에 추가하는 요소의 클래스에서. –