2014-09-20 79 views
0

这里是我的超类问题得到构造继承正确

public class BankAccount 

    { 
     double balance; 
     public BankAccount(double initialBalance) 
     { 
      this.balance = initialBalance; 
     } 
     public void deposit(double amount) 
     { 
      balance += amount; 
     }  
     public void withdraw(double amount) 
     { 
      balance -= amount; 
     }  
     public double getBalance() 
     { 
      return balance; 
     }   
     public void transfer(double amount, BankAccount other) 
     { 
      balance -= amount; 
     }  
    } 

下面是扩展类是

public class CheckingAccount extends BankAccount 
{ 
    int transactionCount; 
    double fee; 
    public CheckingAccount(double initialBalance) 
    { 
     this.balance = initialBalance; 
     this.transactionCount = 0;   
    }  
    public void deposit(double amount) 
    { 
     balance += amount; 
     transactionCount += 1; 
    } 
    public void withdraw(double amount) 
    { 
     balance -= amount; 
     transactionCount += 1; 
    }  
    public void deductFees() 
    { 
     if(transactionCount > 3) 
     { 
      fee = 2.0*(transactionCount-3); 
     }  
     balance -= fee; 
     transactionCount = 0; 
    }  
} 

构造工作正常的超类,但是当我尝试以扩展类我得到的错误,构造函数不能应用于给定的类型,即使我正在申请一个双重的,就像它是在超类。我刚开始学习继承类,所以任何输入是非常赞赏

+0

调用'super(whatever) '在你的子类的构造函数的顶部。 – khelwood 2014-09-20 17:24:33

回答

2

您需要使用super关键字来调用您的父母的构造函数。你的父类不会没有一些参数传递给它的定义,所以你可以做这样的:

public CheckingAccount(double initialBalance) { 
    super(initialBalance); 
    this.transactionCount = 0;   
}  
0

你的情况是你没有在你的超类定义默认构造函数。如果你将添加下面的构造函数,你将不会有错误。

public BankAccount(){ 
    //default constructor 
} 

当您尝试实例化您的子类时,将会首先调用您的超类的默认构造函数。所以,你可以添加默认consturctor到您的BankAccount我说了,里面写

public BankAccount() { 
    System.out.println("loading superclass default"); 
} 

在子类中写

public CheckingAccount(double initialBalance) { 
    System.out.println("loading subclass"); 
    this.balance = initialBalance; 
    this.transactionCount = 0; 
} 

然后尝试

CheckingAccount acc = new CheckingAccount(52); 

而且你会看到结果:

loading superclass default 
loading subclass