Как ссылаться на объект в другом классе - PullRequest
1 голос
/ 27 мая 2019

Я новичок в Java.Я должен сделать корзину.Но я застрял на ссылке.

Пожалуйста, помогите мне!

Я пытался сделать закрытую переменную-член ShoppingCart в классе Customer.Но я думаю, что это не правильный путь.

Customer.java

public class Customer {
    private String id;
    private String firstName;
    private String lastName;
    private ShoppingCart s;

    public Customer(String id, String firstName, String lastName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        s = new ShoppingCart();
    }

    @Override
    public String toString() {
        return ("Customer ID is: " + this.id + "\n" + "Customer's name is: "
                 + this.firstName + " " + this.lastName + "\n\n" 
                + s.toString());

    }
}

Test.java

public class Test {
        public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        Customer c1 = new Customer("12345", "David", "Smith");

        //This sentence doesn't work because of s.
        c1.s.addBooktoCart("Harry Potter", "Fantasy Genre", 10.99, 309);



    }

}

ShoppingCart.java

public class ShoppingCart {
    private int itemCount;
    private double totalPrice;
    private static int capacity;
    private Item[] cart;
    public ShoppingCart()
    {       
        capacity = 5;
        itemCount = 0;
        totalPrice = 0.0;
        cart = new Item[capacity];
    }

    public void addBooktoCart(String title, String description, double price, int pageCount) {

        if (itemCount < 5) {

        Item item = new Book(title, description, price, pageCount);
        totalPrice += price;
        cart[itemCount] = item;
        itemCount += 1;       
        } 
        else {
            System.out.println("The maximum number that you can input is 5." +
                     "You cannot add item anymore");
        }

    }

}

Я хочувызвать addBooktoCart, который находится в классе ShoppingCart в Test.java.Но это не работает.Что мне делать, если я позвоню addBooktoCart?И если есть другая проблема.Пожалуйста, дайте мне знать!

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Вы абсолютно правы private. Просто не обращайтесь к полю напрямую. Вместо этого, пожалуйста, используйте get/set метод.

c1.getS().addBooktoCart("Harry Potter", "Fantasy Genre", 10.99, 309);

Кстати, пожалуйста, тщательно выбирайте название своего поля. s ничего не значит.

0 голосов
/ 28 мая 2019

В Java по договоренности мы должны хранить все переменные как приватные , если только у нас нет особых причин не делать этого . Итак, в вашем случае вы должны оставить ShoppingCart как личное поле в классе Customer.Also, в то время как переменные именования java следуют соглашениям об именах :

См. Документ

Имена переменных чувствительны к регистру. Имя переменной может быть любым допустимым идентификатор - последовательность символов Unicode неограниченной длины и цифры, начинающиеся с буквы, знак доллара "$" или символ подчеркивания "". Соглашение, однако, должно всегда начинаться имена ваших переменных с буквой, а не "$" или "". Кроме того, Знак доллара, по соглашению, никогда не используется вообще. Ты можешь найти некоторые ситуации, когда автоматически сгенерированные имена будут содержать знак доллара, но ваши имена переменных всегда должны избегать его использования. аналогичное соглашение существует для символа подчеркивания; пока это технически допустимо начинать имя вашей переменной с "_", это практика не рекомендуется. Пробелы не допускаются.

В вашем случае вы можете иметь методы setter и getter, чтобы ваша ShoppingCart извлекала объект, а затем присваивала ему экземпляр после ваших операций, например:

Customer.java

public class Customer {
    private String id;
    private String firstName;
    private String lastName;
    private ShoppingCart shoppingCart;

    public ShoppingCart getShoppingCart() {
      return shoppingCart;
    }

    public ShoppingCart setShoppingCart(ShoppingCart shoppingCart) {
      this.shoppingCart = shoppingCart;
    }

    public Customer(String id, String firstName, String lastName) {
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
        s = new ShoppingCart();
    }

    @Override
    public String toString() {
        return ("Customer ID is: " + this.id + "\n" + "Customer's name is: "
                 + this.firstName + " " + this.lastName + "\n\n" 
                + s.toString());

    }
}

Test.java

public class Test {
        public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        ShoppingCart shoppingCart = new ShoppingCart();

        Customer customer = new Customer("12345", "David", "Smith");

        //This sentence doesn't work because of s.
        shoppingCart.addBooktoCart("Harry Potter", "Fantasy Genre", 10.99, 309);
        customer.setShoppingCart(shoppingCart);
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...