2012-12-14 4 views
0

인터페이스에 대한 나의 이해는 메소드 정의, 서명 및 상수 선언 만 포함 할 수 없다는 것입니다. 인터페이스 객체 컬렉션을 포함하는 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 메소드에 무엇을 할 확실하지 : 이것은 내가 목록에 추가 해요 객체입니다.

+0

를 인쇄 할 구현하는 클래스에 toString를 오버라이드 (override) 할 필요가 '당신이 실제로'ArrayList'에 추가하는 요소의 클래스에서. –

답변

0

당신은) (StoreItem하는 경우 당신이 List에 추가의

interface StoreItem { 
    String name(); 
} 

static class Pen implements StoreItem { 

    @Override 
    public String name() { 
     return Pen.class.getName(); 
    } 

    @Override 
    public String toString() { 
     return "Pen to String"; 
    } 

} 

public static void main(String[] args) { 
    List<StoreItem> items= new ArrayList<StoreItem>(); 
    items.add(new Pen()); 
    System.out.println(items); 
} 

당신이`toString을 구현하지 않을 것 소리

[Pen to String] 
+0

이 작업을 시도하고 있지만 여전히 작동하지 않습니다. 그래서 StoreItem, StoreItem을 구현하는 AbstractStoreItem, 그리고 모두 AbstractStoreItem을 확장하는 Widget, Wrench, Wheel이 있습니다.StoreItems로 위젯을 만들고이를 목록에 넣고 있습니다. 나는 AbstractStoreItem, Widget, Wrench, Wheel toString 메서드를 추가하려고 시도했지만 여전히 횡설수설을한다. AbstractStoreItem에는 이미 다음과 같은 toString 메서드가 있습니다. public String toString() { return super.toString() : } 잘못된 것이 있습니까? – Benny

+0

'return super.toString();'당신이 어딘가에서 구현을 제공 할 필요가있는 디폴트의 toString 구현과 같기 때문에 목적을 달성하지 못합니다 –

+0

AbstractStoreItem의 속성을 사용하여 리턴 할 수 있습니까? 나는 내가 실제로 돌려 줄 수있는 것을 확인하는 데 어려움을 겪고 있다고 생각한다. – Benny

관련 문제