java支持多个调度吗?如果不是,以下代码如何工作?
Account.java
public class SavingsAccount implements Account
{
}
SavingsAccount.java
public class LoanAccount implements Account
{
}
LoanAccount.java
public class InterestCalculation
{
public void getInterestRate(Account objAccount)
{
System.out.println("Interest Rate Calculation for Accounts");
}
public void getInterestRate(LoanAccount loanAccount)
{
System.out.println("Interest rate for Loan Account is 11.5%");
}
public void getInterestRate(SavingsAccount savingAccount)
{
System.out.println("Interest rate for Savings Account is 6.5%");
}
}
InterestCalculation.java
public class CalculateInterest
{
public static void main(String[] args)
{
InterestCalculation objIntCal = new InterestCalculation();
objIntCal.getInterestRate(new LoanAccount());
objIntCal.getInterestRate(new SavingsAccount());
}
}
CalculateInterest.java
{{1}}
输出
Interest rate for Loan Account is 11.5% Interest rate for Savings Account is 6.5%
答案 0 :(得分:0)
Overloading是创建多种方法的能力 具有不同实现的同名。
在Java中,这是基于参数的编译时类型执行的:使用matching signature的方法,与参数的值无关。
Overriding允许子类或子类提供 一个已经提供的方法的具体实现 它的超类或父类。
在Java中,这是通过根据所引用对象的运行时(动态)类型确定要调用的方法来执行的。这是Java实现single dispatch的方式,它是not be confused with overloading。
Multiple dispatch表示函数或方法可以 动态调度基于运行时(动态)类型或,在 更一般的情况是一些其他属性,不止一个 参数强>
在Java中,没有直接支持多个调度。
但是,您可以emulate multiple dispatch使用多个单一调度层并结合重载。
请注意,要首先使用此代码,您需要为calculateInterest()
和LoanAccount
提供SavingAccount
的实施,即使它不会在您的其他POC中使用。
在您的班级InterestCalculation
中,您有三种不同的方法getInterestRate()
重载。它们每个都有一个独特的签名(例如参数类型)。因此main()将根据声明的参数类型(从构造函数推导出来)调用正确的方法。
您可以优化单个调度的使用,并使InterestCalculation
更加通用(例如,您可以添加更多Account
的实现,而无需更改它):
public interface Account
{
public void calculateInterest();
public double getInterest();
public String getType();
}
...
public class InterestCalculation
{
public void getInterestRate(Account objAccount)
{
System.out.print ("Interest Rate for "+objAccount.getType()+" is ");
System.out.print (objAccount.getInterest());
System.out.println (" %");
}
}