面向对象编程,带参数的构造函数

时间:2015-03-28 03:58:07

标签: java oop constructor

所以这是代码,我不明白的几行。

account acct = new account(); // making a new object named acct, type:account

ConsoleAccountEvents c1 = new ConsoleAccountEvents(acct); // new object created with parameters.

acct.addObserver(c1); // also not sure. 

acct.addTransaction(100.00); // not sure.... 

这是Java。我不确定如何将参数传递给构造函数。

3 个答案:

答案 0 :(得分:1)

在java中,当使用new关键字创建类的对象时,将调用构造函数。因此,要使用某个参数调用构造函数,您只需根据您的需求示例创建一个带参数的对象。

class ConsoleAccountEvents {

    Account account;

    public ConsoleAccountEvents(Account account) {
        this.account = account;
    }
}

class Account {

}

所以当你用

创建对象时
Account acct = new Account(); 
ConsoleAccountEvents c1 = new ConsoleAccountEvents(acct);

所以这里将调用参数化构造函数,并且该对象将在ConsoleAccountEvents

的实例变量中赋值

答案 1 :(得分:0)

你的ConsoleAccountEvents课程必须是这样的 -

class ConsoleAccountEvents {
    Account accObject; // you have an object of 'Account' class as a member variable in this class
    // other variables
    public ConsoleAccountEvents() {
        // body here
    }
    public ConsoleAccountEvents(Account accObject) {
        this.accObject = accObject; // see below
        // body here
    }
    // others
}

执行此操作ConsoleAccountEvents c1 = new ConsoleAccountEvents(acct);

您正在调用参数化构造函数,该构造函数将Account对象作为参数,并通常使用它accObject初始化AccountConsoleAccountEvents类的对象)。

现在,对于acct.addObserver(c1);

Account课程中,您必须拥有以addObserver为参数的方法ConsoleAccountEvents。像

void addObserver(ConsoleAccountEvents evOb) {
    // body
}

PS: 请遵循java命名约定和其他约定,例如大写类名的第一个字母等。

如果您不通过Java Language Tutorial,stackoverflow将不会有多大帮助。祝你好运......!

答案 2 :(得分:0)

我认为您可能正在寻找的是new关键字如何运作,但让我彻底:

有关在Java中构造对象的一些注意事项:

  1. 每次你请求"都会调用构造函数。 new Account()
  2. 构造函数可以定义为使用任何类型的参数(因此需要参数) - 类型和基本类型(int,float,char等)。
  3. 如果构造函数被调用为new SomeClass(someObject)someObject是传递给SomeClass构造函数的参数。
  4. 在类的构造函数中,参数使用类型和名称定义:

    class ConsoleAccountEvents{
        Account account;
    
        ConsoleAccountEvents(Account a){
            account = a;
        }
    }
    

    此处参数" a"被定义为Account"类型" - 发送到构造函数的参数必须是Account类的实例,换句话说,构造函数需要Account对象。因此,为了构造ConsoleAccountEvents对象,我们必须将Account对象作为参数传递给它:

    Account acct = new Account();
    ConsoleAccountEvents c1 = new ConsoleAccountEvents(acct)
    

    使用" new"调用以下类的构造函数。对于Account类,我们不需要创建对象的参数 - 它有默认构造函数,但是我们需要使用一个Account对象 - acct - as允许构造ConsoleAccountEvents的参数,因为它的构造函数在其定义中有一个Account类型参数。

    在其他语言中,有更多方法可以构建对象。例如,在C ++中,程序员可以选择将哪些对象保存在"堆"和#34;堆栈"通过在使用new关键字vs直接调用构造函数之间切换,就好像它是任何其他函数一样。在Java中,这是不可能的。几乎所有对象都是使用new关键字创建的,或者以某种方式复制另一个对象。我相信即使序列化反序列化也必须在new处开始创建第一个对象。