Могу ли я ограничить наследование для пакета без использования «по умолчанию»? - PullRequest
7 голосов
/ 09 августа 2011

У меня есть несколько классов, которые нужно расширить в одном пакете. Но я не хочу, чтобы кто-то еще, кроме моего пакета, продлевал мои занятия. Классы в других пакетах должны иметь возможность вызывать мои классы, поэтому я не могу использовать «default».

Есть ли способ (возможно, через интерфейс), чтобы я мог достичь этого?

Ответы [ 3 ]

7 голосов
/ 09 августа 2011

Если вы сделаете свой пакет конструкторов локальным, он может быть расширен только в том же пакете, однако к общедоступным членам можно получить доступ в любом классе, если это открытый класс.

6 голосов
/ 09 августа 2011

Я бы сделал это, создав базовый класс с видимостью default, а затем расширил бы его классом public final, в который внешние классы могут обращаться, но не расширять.Например:

class MyBase {
    public void doSomething() { ... }
}

public final class PublicBase extends MyBase { }

class ExtendedBase {
    @Override
    public void doSomething() { ... }
}
0 голосов
/ 09 августа 2011

Вы можете создать интерфейс для использования класса и фабричного класса, который будет возвращать конкретные реализации, обе из которых будут открытыми и, следовательно, видимыми вне пакета.Затем создайте ваши конкретные классы с видимостью по умолчанию.

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