如何避免Java中的init覆盖

时间:2014-09-19 01:52:51

标签: java

我是java的新手,我遇到了这样的问题。

public class Account {
    private String name;
    private double balance;
    private static int nextID;
    int acctID;

    Account(String n, double bal) {
        init();
        this.name = n;
        this.balance = bal;
        print();
    }

    void init() {
        this.acctID = nextID++;
    }
}

public class SavingsAccount extends Account {
    private double interest;

    public SavingsAccount(String n, double bal, double interest) {
        super(n, bal);
        this.interest = interest;
    }

    void init() {
    }
}

类SavingsAccount将使用其init(),这是错误的。我知道我可以这样做来解决问题。

public class Account {
    private String name;
    private double balance;
    private static int nextID;
    int acctID;

    Account(String n, double bal) {
        init();
        this.name = n;
        this.balance = bal;
        print();
    }
    {
        this.acctID = nextID++;
    }
}

我想问一下是否有其他方法可以解决这个问题,例如强制其他类使用Account.init()或者不允许其他人使用它们的init()?

1 个答案:

答案 0 :(得分:3)

如果您使用init()方法final,则无人可以覆盖它。

final void init() {
    this.acctID = nextID++;
}

http://docs.oracle.com/javase/tutorial/java/IandI/final.html