Вам необходимо иметь public
методы доступа (геттеры) для доступа к private
членам других классов.
Сделайте это следующим образом:
import java.util.Scanner;
class Engine {
String name;
int year;
String manufacturer;
public Engine() {
}
public Engine(String name, int year, String manufacturer) {
this.name = name;
this.year = year;
this.manufacturer = manufacturer;
}
// getters and setters of instance variables
@Override
public String toString() {
return "Engine [name=" + name + ", year=" + year + ", manufacturer=" + manufacturer + "]";
}
}
class Submarine {
private String id;
private Engine engine;
public Submarine(String id, Engine engine) {
this.id = id;
this.engine = engine;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
public Engine getEngine() {
return engine;
}
@Override
public String toString() {
return "Submarine [id=" + id + ", engine=" + engine + "]";
}
}
class ShipStorage {
private Submarine submarine;
private Submarine[] submarines;
public void setSubmarine(Submarine submarine) {
this.submarine = submarine;
}
public Submarine getSubmarine() {
return submarine;
}
public void setSubmarines(Submarine[] submarines) {
this.submarines = submarines;
}
public Submarine[] getSubmarines() {
return submarines;
}
}
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
ShipStorage store = new ShipStorage();
// Input submarines
Submarine[] submarines = new Submarine[3];
String id, name, manufacturer;
int year;
for (int i = 0; i < submarines.length; i++) {
System.out.print("Enter the ID of the sumarine: ");
id = in.nextLine();
System.out.print("Enter the name of its engine: ");
name = in.nextLine();
System.out.print("Enter the manufacturing year of its engine: ");
year = Integer.parseInt(in.nextLine());
System.out.print("Enter the manufacturer's name of its engine: ");
manufacturer = in.nextLine();
submarines[i] = new Submarine(id, new Engine(name, year, manufacturer));
}
// Store submarines to ShipStorage
store.setSubmarines(submarines);
// Display submarines
System.out.println("Displaying the data: ");
for (Submarine submarine : store.getSubmarines()) {
System.out.println(submarine);
}
}
}
Пример прогона:
Enter the ID of the sumarine: 1
Enter the name of its engine: A
Enter the manufacturing year of its engine: 2010
Enter the manufacturer's name of its engine: X
Enter the ID of the sumarine: 2
Enter the name of its engine: B
Enter the manufacturing year of its engine: 2011
Enter the manufacturer's name of its engine: Y
Enter the ID of the sumarine: 3
Enter the name of its engine: C
Enter the manufacturing year of its engine: 2018
Enter the manufacturer's name of its engine: Z
Displaying the data:
Submarine [id=1, engine=Engine [name=A, year=2010, manufacturer=X]]
Submarine [id=2, engine=Engine [name=B, year=2011, manufacturer=Y]]
Submarine [id=3, engine=Engine [name=C, year=2018, manufacturer=Z]]