2012-03-21 2 views
0

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

В основном в моем основном коде У меня есть строка, как этот

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

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

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

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

public double monthly fee = 

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

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

+0

FWIW, полезная страница для вас может быть http://docs.oracle. com/javase/tutorial/java/javaOO/classvars.html –

ответ

3

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

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

// Instance var declaration 
private double monthly_fee; 

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

@Jeremy:

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

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

C++ для Java-вопроса? И у конструктора есть ошибка. – Jochen

+1

Я сказал псевдокод, а не C++; Я просто использовал синтаксис для C++, чтобы ответить [но спасибо, я исправлю «ошибку»] – jonathanl

0

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

public final class CheckingAccount { 
    private double monthlyFee; 

    // The rest of the class goes here 

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

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

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

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

Вы в основном правы. Если вы еще не сделали, вы должны создать новый класс (он должен быть в его собственном файле с именем 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 double 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(double monthlyFee) { 
     this.monthlyFee = monthlyFee; 
    } 

    // Here will be your methods to calculate something... 
} 
Смежные вопросы