2017-01-14 2 views
-1

다음 코드를 기반으로 상속 + 재정의 개념을 설명해야합니다. 나는 자바를 배우는 아주 새로운 오전으로 숙제 : Java에서 상속 + 오버라이드 설명

public class Item { 

private String itemType; 
private String serialNumber; 

public Item(String serialNumber, String itemType) { 
    this.setItemType(itemType); 
    this.setSerialNumber(serialNumber);  
} 

public String getItemType() { 
    return itemType; 
} 

public void setItemType(String itemType) { 
    this.itemType = itemType; 
} 

public String getSerialNumber() { 
    return serialNumber; 
} 

public void setSerialNumber(String serialNumber) { 
    this.serialNumber = serialNumber; 
} 

public String printItem() { 
    return serialNumber + "," + itemType; 
} 
} 



public class Ipad extends Item { 

private int ram; 

public Ipad(String serialNumber, int ram) { 
    super(serialNumber,"iPad"); 
    this.setRam(ram); 
} 

public int getRam() { 
    return ram; 
} 

public void setRam(int ram) { 
    this.ram = ram; 
} 

public String printItem() { 
    return super.getSerialNumber() + "," + super.getItemType()+ "," + getRam() + " GB"; 
} 
} 

나는 실제로 무슨 설명하는 힘든 시간을 : 나는 더 많은 연습을 얻을 때까지, 내 ​​자신에 각 라인을 주석, 그러나 지금까지하고있는 단계별로 단계적인 코멘트가 나를 파악하는 가장 좋은 방법 인 것 같습니다.

1) 아래의 코드 스 니펫은 어떻게됩니까? 나는 그것이 생성자라고 가정하지만 아래의 두 행은 무엇을합니까?

public Item(String serialNumber, String itemType) { 
    this.setItemType(itemType); 
    this.setSerialNumber(serialNumber); 

2) 아래에서 어떻게됩니까? 두 개의 생성자가 있습니까? 제가 알고 있듯이 생성자를 재정의 할 수 없습니다. 슈퍼가 슈퍼 클래스에서 생성자를 호출하지만 새 ram 변수가 추가되었다고 가정합니다. 재정의되고 있지 않다면 이것은 생성자 체인이라고하는 것입니까?

public Ipad(String serialNumber, int ram) { 
    super(serialNumber,"iPad"); 
    this.setRam(ram); 
} 

3) 무엇이 대체되고 있습니까?

4) 확장 키워드와 수퍼 키워드를 사용하는 것 외에 어떻게이 예제로 상속을 설명 할 수 있습니까?

+5

질문마다 1 개의 질문을 제한하십시오. – Idos

+0

죄송합니다. 압도적 인 표정으로 보입니다. :) –

+0

여기에서 찾을 수있는 많은 답변이나 인터넷 검색 및 직접 입력하여 소스 코드를 사용해 보시기 바랍니다. 입력 할 때 상속의 개념과 제한을 시도하십시오. 예를 들어 파생 클래스의 기본 클래스에 대한 개인 메서드를 사용해보십시오. 컴파일되지 않습니다. 그럼 모두 시도해 보면 좋은 그림을 얻을 수 있습니다. 필요한 경우 기본 클래스를 변경하십시오. – efekctive

답변

1

1을 출력합니다; 이는 Item 클래스의 생성자에서 볼 수 있듯이 일련 번호와 항목 유형을 제공된 인수로 설정하기 만하면됩니다. 생성자는 일반적으로 객체가 작동하기 위해 필요한 인수를 가지므로 그 이유가 있습니다. 객체가 완전히 '생성'되었는지 확인합니다. 객체가 다른 인자 건설 객체에 제공된 갖는 재사용 구조 기능을 허용 그 생성자의 또 다른 하나를 참조 할 때

public Item(String serialNumber, String itemType) { 
this.setItemType(itemType); 
this.setSerialNumber(serialNumber); 

2) 생성자 체인이다. 예를 들어, IPad 개체는 단순히 Item 생성자를 상속합니다. 하위 클래스로서, IPad는 Item 생성자를 자체 구조로 참조해야합니다. 이 작업은 첫 번째 행에서 수행해야합니다. 그런 식으로 생성자를 재정의 할 수 없다는 것은 사실이지만, IPad 생성자 인수에서 제공된 값으로 RAM을 설정하여 Item 클래스에없는 IPad 클래스의 생성에 추가 기능을 추가 할 수 있습니다.

public Ipad(String serialNumber, int ram) { 
super(serialNumber,"iPad"); 
this.setRam(ram); 

3) 당신은 항목의 인쇄 된 문자열 표현으로 항목의 램을 추가 #printItem 이외의이 예에서는 아무것도 무시하지 않습니다. 그 외에는 Ipad 클래스를 통해 Item 클래스에 상속 받고 추가되는 것입니다.

4) 영어로 설명 할 수 있습니다.IPad는 항목이며 모든 기능과 데이터를 항목으로 가지고 있으며 IPad 고유의 기능과 데이터를 추가합니다.

다른 상황과 비교해 볼 수도 있습니다. 직사각형 및 사각형과 같은. 사각형은 사각형이지만, 사각형이 반드시 사각형 일 필요는 없습니다. IPad는 하나의 항목이지만 항목은 반드시 IPad 일 필요는 없습니다. 이것은 좀 더 일반적인 부모의 한 부분 인 명세입니다.

+0

고마워, 저스티스! 그것은 나를 위해 그것을 너무 많이 정리했다 :) 그래서 실제로 현재 가장 우선적 인 선물이 없다? –

+0

# 3에서 실수 한 부분을 수정하기 위해 내 대답을 편집했습니다. printItem 메서드를 재정의했습니다. 이보다 더 일찍 보지 못해 사과드립니다. 나머지 응답은 당신에게 유용하다는 것이 다행입니다.^- ^ – justis

0

이 예제를 사용하여 설명 할 수있다 :

Item item = new Ipad("serial", 123); 
System.out.println(item.printItem()); 

당신은 IpadItem에서 그것을 상속을 무시하기 때문에 방법 printItem()Ipad 클래스 구현으로 실행되는 것을 말할 수있다.

그래서, printItem()가 제공 한 조각은 일련 번호와 항목 유형의 매개 변수 항목 개체를 만드는 것입니다) "serial, iPad, 123"

관련 문제