Поддерживает ли Java многократную отправку? Если нет, то как работает приведенный ниже код?
Поддерживает ли Java многократную отправку? Если нет, то как работает приведенный ниже код?
Account.java
public interface Account
{
public void calculateInterest();
}
SavingsAccount.java
public class SavingsAccount implements Account
{
}
LoanAccount.java
public class LoanAccount implements Account
{
}
InterestCalculation.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%");
}
}
CalculateInterest.java
public class CalculateInterest
{
public static void main(String[] args)
{
InterestCalculation objIntCal = new InterestCalculation();
objIntCal.getInterestRate(new LoanAccount());
objIntCal.getInterestRate(new SavingsAccount());
}
}
Выход
Процентная ставка по кредиту составляет 11,5% Процентная ставка по Сберегательному счету составляет 6,5%
1 ответ
Сначала немного терминологии
Перегрузка - это возможность создавать несколько методов с одинаковыми именами в разных реализациях.
В Java это выполняется на основе типа аргументов во время компиляции: метод с совпадающей сигнатурой используется независимо от значения аргумента.
Переопределение позволяет подклассу или дочернему классу предоставлять конкретную реализацию метода, которая уже предоставлена одним из его суперклассов или родительских классов.
В Java это выполняется путем определения вызываемого метода в зависимости от динамического (динамического) типа объекта, на который ссылаются. Это способ Java реализовать единую диспетчеризацию, и его не следует путать с перегрузкой.
Многократная диспетчеризация означает, что функция или метод могут быть динамически отправлены на основе динамического (динамического) типа времени выполнения или, в более общем случае, какого-либо другого атрибута, более чем одного из его аргументов.
Поддерживает ли Java множественную диспетчеризацию?
В Java нет прямой поддержки множественной отправки.
Однако вы можете эмулировать несколько отправлений, используя несколько слоев одной отправки в сочетании с перегрузкой.
Как работает этот код?
Обратите внимание, что этот код для работы в первую очередь требует, чтобы вы предоставили реализацию 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 (" %");
}
}