2014-02-04 3 views
0

Я пытаюсь написать программу, которая принимает объекты, созданные в одном классе, и помещает их в конструктор другого класса. Я не понимаю общую концепцию этого. Я не ищу ответа на код, но я ищу общие причины, по которым он работает, чтобы я мог понять, что делать.Вызов класса в конструкторе другого класса в java

Вот код, который я пытаюсь взять с четырьмя экземплярами объекта Корабль и поместить их в Флот. Мне не нужен конкретный ответ только для того, чтобы я понял, как принимать объекты, созданные из одного класса, в конструктор другого.

public class Ship { 
// instance variables 

private String shipType; // The type of ship that is deployed in a fleet. 
private int fuelTankSize; // The fuel that each ship has at the start. 
private double currentFuelLevel; // the change in fuel either consumed or added. 
// constuctors 
// takes in the shiptype and fuelunits to be set in the driver. 
public Ship(String inShip, int inFuel) { 
    shipType = inShip; 
    fuelTankSize = inFuel; 
    currentFuelLevel = inFuel; 
} 


public class Fleet 
{ 
// instance variables 

// constructor 
public Fleet(Ship ship1, Ship ship2, Ship ship3, Ship ship4){ 

} 
//methods 
+0

'новый флот (новый корабль (..), новый корабль (..), ..) ', но, вероятно, было бы неплохо не использовать конструктор здесь (и использовать коллекции внутри), так как существует произвольное количество кораблей:' Fleet homeguard = new Fleet(); homeguard.addShip (новый корабль (..)); ..' – user2864740

+2

Я не уверен, что понял вопрос. Аргументы конструктора передаются так же, как передаются аргументы любой другой функции. Если это объекты, они передаются по ссылке. – keshlam

+0

"объекты, созданные в одном классе и помещающие их в конструктор другого класса". Объекты не создаются «в» классе. Класс - это вид плана создания объектов. Вы создаете объекты корабля в любом месте вашего кода, а затем передаете * их * в свой конструктор флота. – webuster

ответ

0

Если цель Fleet конструктор для присвоения значений четырех Ship переменных, вы делаете это так же, как и с любым другим конструктором:

public class Fleet 
{ 

    // instance variables 
    Ship ship1; 
    Ship ship2; 
    Ship ship3; 
    Ship ship4; 


    // constructor 
    public Fleet(Ship ship1, Ship ship2, Ship ship3, Ship ship4){ 
     this.ship1 = ship1; 
     this.ship2 = ship2; 
     this.ship3 = ship3; 
     this.ship4 = ship4; 

    } 

    //methods 
} 
1

Отсутствие фактического вызова конструктора. Все, что вы действительно делаете, это определение параметров, которые могут быть переданы в ваш конструктор.

Фактически вы передаете объекты таким образом.

Ship ship1 = new Ship("sailboat", 5); 
Ship ship2 = new Ship("sailboat", 5); 
Ship ship3 = new Ship("sailboat", 5); 
Ship ship4 = new Ship("sailboat", 5); 
Ship ship5 = new Ship("sailboat", 5); 

Fleet myFleet = new Fleet(ship1, ship2, ship3, ship4, ship5); 
+0

Драйвер для этих классов выполняет то, что вы набрали, мне нужно понять в классе флота, как я могу получить доступ к кораблям в конструкторе флота. – user3113722

0

Таким образом, способ, которым другой класс «держит» объекты другого класса в Java, заключается в том, что он хранит ссылки на них. Итак, когда вы создаете ship1, вы выделяете пятно в памяти для ship1 и его переменных экземпляра. Затем, когда вы передаете его как параметр на флоте, Fleet хранит ссылку, в основном говорящую: «ship1 хранится в этой ячейке памяти», а затем, когда вы используете его из другого метода внутри флота, он манипулирует ship1, перейдя в эту ячейку памяти.

Смежные вопросы