Почему переопределенный метод должен быть публичным в этой программе? - PullRequest
0 голосов
/ 06 июня 2018
import java.util.*;
interface AdvancedArithmetic{
  int divisor_sum(int n);
}
class MyCalculator implements AdvancedArithmetic
{
    int sum=0;
    int divisor_sum(int n)  //Why this method should be public?
    {
        for(int i=1;i<=n;i++)
        {
            if(n%i==0)
            sum=sum+i;
        }
        return sum;
    }
}

почему метод внутри класса MyCalculator должен быть публичным?Он показывает ошибку типа

error: divisor_sum (int) в MyCalculator не может реализовать divisor_sum (int) в AdvancedArithmetic int divisor_sum (int n) ^ при попытке назначить более слабые права доступа;была общедоступна 1 ошибка

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Рассмотрим программирование для интерфейсов.Ваш интерфейс гарантирует, что существует метод divisor_sum(int n) с public в качестве (по умолчанию) модификатора доступа.

Теперь представьте себе:

public void doSomething(AdvancedArithmetic implementation) {
    int test = implementation.divisor_sum(5);
    // continue
}

Если бы Java позволила реализацию (ny)из этого interface метода access modifier более узкого, чем метод interface, это может привести к серьезным проблемам и поломке программного обеспечения, поскольку реализация не следует контракту interface.

0 голосов
/ 06 июня 2018

int divisor_sum(int n) реализует метод интерфейса.Методы интерфейса имеют доступ public (даже если вы не указали его явно), поэтому вы не можете уменьшить видимость метода в реализующем классе.

Обратите внимание на следующее:

MyCalculator mc = new MyCalculator();
AdvancedArithmetic aa = mc;

Если вы не предоставите divisor_sum() методу в MyCalculator классе уровень доступа public, вы не сможете вызвать его через ссылку на класс (mc.divisor_sum(4)), но вы сможете вызватьэто через ссылку на интерфейс (aa.divisor_sum(4)).Это не имеет смысла, и поэтому не допускается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...