Переменная экземпляра в другом классе

Я работаю над домашним заданием, и я не буду публиковать полный код, но я застрял на чем-то, что, вероятно, простое, и я не могу найти его в своей книге, поэтому мне нужно указывать в правильном направлении. Я работаю с классами и интерфейсами.

В основном в моем главном коде у меня есть строка, подобная этой

CheckingAccount checking = new CheckingAccount(1.0); // $1 monthly fee

Мне сказали создать класс под названием CheckingAccount, и в этом классе мне сказали: "Этот класс должен включать переменную экземпляра для ежемесячной платы, которая инициализируется значением, переданным конструктору.

Поскольку я новичок, для меня это едва ли не английский, и я предполагаю, что это говорит о том, что нужно принять эту плату в размере 1,00 и объявить ее в классе CheckingAccount, чтобы я мог создать метод с использованием этой переменной для вычисления чего-то.

soooo... Как мне это сделать? Я знаю, как создать переменную экземпляра, это будет что-то вроде

public ****** monthly fee =

но что тогда? или я могу ошибаться. Я действительно плохо себя чувствую в этом java-материале. Любая помощь приветствуется.

Я предполагаю, что другой способ спросить это, я просто объявляю его как 1.0? или я "импортирую" это значение в случае, если он изменится позже, в какой-то момент вам не придется проходить через код, чтобы изменить его во всех классах?

4 ответа

Ваше требование (как я его прочитал) заключается в инициализации переменной экземпляра в конструкторе, и ваша инстанция (new CheckingAccount(1.0);) показывает, что вы на правильном пути.

То, что понадобится вашему классу, - это метод конструктора, который получает и устанавливает это значение 1.0.

// Instance var declaration
private ****** monthly_fee;

// Constructor receives a ****** as its only param and sets the member variable
public CheckingAccount(****** initial_monthly_fee) {
 monthly_fee = inital_monthly_fee;
}


@Jeremy:

Вы на самом деле заняты (по крайней мере, ваша интерпретация того, что вас попросили сделать, соответствует моей интерпретации); в то время как я не знаю фактического дизайна класса, или нужно ли публиковать месячную_обучение, в псевдокоде вы будете смотреть на что-то вроде:

class CheckingAccount { 
 //Instance variable 
 ****** monthly_fee; 
 //Constructor
 CheckingAccount(****** monthly_fee) { 
 this.monthly_fee = monthly_fee; 
 } 
 //Function to multiply instance variable by some multiplier
 //Arguments: Value to multiply the monthly fee by
 ****** multiply_fee(****** a_multiplier) { 
 return monthly_fee*a_multiplier; 
 } 
}


Вы в основном правы. Если вы еще этого не сделали, вам следует создать новый класс (он должен быть в собственном файле под названием CheckingAccount) следующим образом:

/** This is the class of Account with monthly fee. */
public class CheckingAccount {
 // This is the instance variable.
 // It should be 'private' for reasons you will surely learn soon.
 // And NOT static, since that would be a class variable, not an instance one.
 // The capitalization is called camelCase, google it up. Or, even better, find 'JavaBeans naming conventions'
 private ****** monthlyFee;

 // This is the constructor. It is called when you create the account.
 // It takes one parameter, the fee, which initializes our instance variable.
 // Keyword 'this' means 'this instance, this object'.
 public CheckingAccount(****** monthlyFee) {
 this.monthlyFee = monthlyFee;
 }

 // Here will be your methods to calculate something...
}


Не создавайте переменную экземпляра как общедоступную. Это плохая практика, потому что она нарушает принцип скрытия информации (ваш учитель может назвать эту абстракцию). Вместо этого вы можете создать переменную экземпляра как

public final class CheckingAccount {
 private ****** monthlyFee;

 // The rest of the class goes here

 public ****** getMonthlyFee() { // This method is called an accessor for monthlyFee
 return monthlyFee;
 }
}

Обратите внимание, что monthly fee не является допустимым именем переменной, поскольку она содержит пробел, а имена переменных не могут содержать пробелы. Также обратите внимание, что другие классы получают доступ к monthlyFee через метод. Поскольку вы определяете метод, а не monthlyFee переменную public, вы намного лучше контролируете доступ к monthlyFee (другой класс не может просто изменить monthlyFee если вы не определяете метод, который делает это изменение).

Теперь вы monthlyFee доступ к monthlyFee. Метод getMonthlyFee называется аксессором по какой-либо причине: он позволяет другим классам обращаться к этой переменной. Таким образом, эти другие классы могут просто вызвать метод, чтобы получить ежемесячную плату из CheckingAccount:

CheckingAccount checking = new CheckingAccount(1.0);
// A bunch of other code can go here
****** fee = checking.getMonthlyFee(); // Now fee is 1.0

licensed under cc by-sa 3.0 with attribution.