2014-01-30 1 views
1

이해 상속 :자바 - 나는 자바에 새로 온 사람과 지금 주 동안 수강 한 다음과 같은 정보와 함께 프로그램을 완료하기 위해 요청을받은

  1. 디자인 배 클래스의 데이터 필드는 다음과 같습니다.

    • 우주선 이름 (문자열)에 대한 데이터 필드.

    • 우주선이 지어진 해 (int)의 데이터 필드.

    • 생성자와 적절한 접근 자 및 변경자.

    • 배의 이름과 빌드 된 연도를 표시하는 toString 메서드입니다.

  2. 디자인 선박 클래스를 확장하는 cruiseship와 서브 클래스

    . CruiseShip 클래스는 다음을 가져야합니다.

    • 최대 승객 수 (int)에 대한 추가 데이터 필드.

    • 생성자와 적절한 접근 자 및 변경자.

    • 기본 클래스의 toString 메서드를 재정의하는 toString 메서드입니다. CruiseShip 클래스의 toString 메소드에는 최대 승객 한도 인 도 포함되어야합니다.

  3. Ship 클래스를 확장하는 CargoShip 클래스를 설계하십시오. CargoShip 클래스는 다음이 있어야합니다

    • 톤의화물 용량 (int 형)에 대한 추가 데이터 필드.

    • 생성자와 적절한 접근 자 및 변경자.

    • 기본 클래스의 toString 메서드를 재정의하는 toString 메서드입니다. CargoShip 클래스의 toString 메서드에는 화물 톤도 포함되어야합니다. 적절한 클래스에서

  4. 두 선박이 동일한 경우 테스트 방법과 동일 포함 - 그들이이 같은 이름을 가지고있는 경우 서로 동일한 것으로 간주되어야하고, 같은 해에 건설되었다.

  5. Ship 개체 (적어도 5 개)의 배열을 가진 프로그램 (ShipTester)에서 클래스를 보여줍니다. 배열 요소에 다양한 Ship, CruiseShip, 및 CargoShip 개체를 할당하고 ( 개체 및 데이터를 하드 코드 할 수 있음) 초기 선박 구성을 인쇄하십시오. 을 표시하면 이라는 샘플링에서 접근 자 및 변이 자 메서드를 사용할 수 있습니다 (다시 말하면 이 마음에 들면 메서드 인수를 하드 코딩 할 수 있습니다).

나는 질문을 물어 무엇의 기초를 이해하고 난 다음했던 :

Ship.java

public class Ship { 

    private String name; 
    private int yearBuilt; 

    public Ship(String name, int yearBuilt) { 

     this.name = name; 
     this.yearBuilt = yearBuilt; 

    } 

    public String returnName() { 

     return this.name; 

    } 

    public int returnYear() { 

     return this.yearBuilt; 

    } 

    public boolean equals(Ship other) { 

     return false; 

    } 

    public String toString() { 

     return "[Name: " + this.name + ". Year built: " + this.yearBuilt + "]"; 

    } 
} 

CruiseShip.java

public class CruiseShip extends Ship { 

    private int maxPassengers; 

    public CruiseShip() { 

     super("USS Enterprise", 2245); 

     this.maxPassengers = 2400; 

    } 

    public CruiseShip(String name, int yearBuilt, int maxPassengers) { 

     super(name, yearBuilt); 
     this.maxPassengers = maxPassengers; 

    } 

    public String toString() { 

     return "Cruise Ship" + super.toString() + ", Passengers: " + this.maxPassengers + "]"; 

    } 

} 

을 CargoShip.java

public class CargoShip extends Ship { 

    private int cargoCapacity; 

    public CargoShip() { 

     super("Black Pearl", 1699); 

     this.cargoCapacity = 50000; 

    } 

    public CargoShip(String name, int yearBuilt, int cargoCapacity) { 

     super(name, yearBuilt); 
     this.cargoCapacity = cargoCapacity; 

    } 

    public String toString() { 

     return "Cargo Ship" + super.toString() + ", Tonnage: " + this.cargoCapacity + "]"; 

    } 

} 

내 테스터 파일에 5,- ShipTester.java

public class ShipTester { 
    public static void main(String []args) { 

     //I don't know what to put over here... 

    } 
} 

내가 main 메소드에 넣어 해야할지 모르겠어 ... 난 선박의 배열을 만들 필요가 알고하지만 난 않습니다 수행하는 방법을 모르는 내가 했어야 해요 화물선, 유람선 등등 ...

출력과 :

표시 선박 : 선박 [이름 : 퀸 앤스 복수 년도 내장 : 1701]

012 3,516,

크루즈 선박 [선박 [이름 : USS 엔터프라이즈 년도 : 2245, 승객 : 2400]

화물선 [선박 [이름 : 블랙 펄 년도 건설 : 1699, 톤수 : 50000]

크루즈 선박 [선박 [이름 : USS 보이저 년도 : 2371, 승객 : 2800]

화물선 [선박 [이름 : 승리 건축 년도 : 1790], 톤수 : 33100]

+0

힌트, 당신은 방금 대답을 말했다 : * ... 나는 배의 배열을 만들어야 만한다. * –

+1

'Ship [] ships = new Ship [5]; 그리고 배'[0] = ....'. 당신은 이것을 할 수 있습니다, 나는 확신합니다, 그냥 가면서 어떻게되는지보십시오. –

+0

또한'Ship' 클래스에서'equals' 메소드가 올바르지 않습니다. 요구 사항에 따라'yearBuilt'와'name'을 테스트해야합니다. –

답변

2

호버 한 말에 확장을 그러나 당신은 객체 배열을 위해 ArrayList를 사용하기를 원할 것입니다.

Creating an Arraylist of Objects

등 예

ArrayList<Ship> myArray = new ArrayList(); 
myArray.add(new CargoShip("TheKing",1990,10000)); 
myArray.add(new CruiseShip("Princess",2000,5000)); 

[편집], 당신은 당신 인쇄 간단한 for 루프를 사용하여 너무

를 인쇄 할 필요가 잊었 예를

:

for (int i = 0; i < myArray.size(); i++) { 
    System.out.println(myArray.get(i).toString()); 
} 

참고 - 이것은 학습 과정을 뛰어 넘고 싶지 않은 정확한 대답이 아닙니다. 그러나 이것은 적어도

+2

1) 그의 지시에는 ArrayList와 같은 콜렉션이 아니라 배열을 만드는 것에 대한 언급이 있습니다. 2)'toString()'호출은 디폴트로 호출되기 때문에'println (...)'문장 안에 필요하지 않습니다. 후자는 사소한 생각이지만, 내 첫 문장은 더 중요합니다. –

0

Ship 공통의 가족으로 다른 모든 클래스를두고 "기본"부모 클래스입니다 ... 당신이 취할 수있는 경로의 아이디어를 줄 것이다. 즉, CruiseShipCargoShip은 실제로 Ship으로 가장 할 수 있습니다. 이것은 Polymorphism의 모퉁이 돌이고 객체 지향 프로그램을 매우 강력하게 만드는 기능 중 하나입니다.

은 예제 코드를 기반으로, 당신은 단순히 예를 들어, Ship의 배열을 만들어야합니다 ...

Ship[] ships = new Ship[5]; 
당신은 단순히 선박의 구색이 배열을 채울 필요가

...이 인 의미

ships[0] = new CargoShip("Lolli Pop", 1965, 1990); 
ships[1] = new CruiseShip("Love Boat", 1980, 8); 

CargoShipCruiseShip 이후 Ship 각 요소 "행위" Ship에서 상속받은 경우, 이것은 "배송"이기 때문에 그렇게 할 수 있습니다.

Ship의 표시 정보는 toString 메서드에 의해 정의되었으므로 그냥 System.out.println(instanceOfShip)을 사용하여 인쇄 할 수 있습니다. 예를 들어 ...

for (Ship ship : ships) { 
    System.out.println(ship); 
} 

는 자세한 내용이 혼란하고 어려운 보일 수도 있지만, 상속의 기본을 이해하고 나면, 그것은 매우 분명하게 매우 것

에 대해 자세히 Inheritance보고 Arrays를 타고 강력한

+0

감사합니다! equals 메서드를 수행하는 방법에 대한 힌트를 얻을 수 있습니까? 나는'public boolean equals (ship [0], ship [1])'' – Vanessa

+0

*의 라인을 따라 생각하고있다. "같은 이름을 갖고 같은 해에 지어진 것이라면 평등하다고 생각해야한다. 두 선박 모두'returnName'과'returnYear'가 동일 할 필요가 있습니다. 'equals'는 대개 하나의 인스턴스를 다른 인스턴스로 전달함으로써 이루어집니다. 예를 들어 답안의 예제에 따라'ship [0] .equals (ship [1])' – MadProgrammer

관련 문제