Как наследовать от базового класса, но сделать некоторые открытые методы из базового класса частными в производном классе? [Дубликат]

Для меня мне пришлось добавить репозиторий EPEL. Именно здесь появился мой php-mcrypt:

[root@system ~]$ repoquery -i php-mcrypt

Name        : php-mcrypt
Version     : 5.3.3
Release     : 1.el6
Architecture: i686
Size        : 39225
Packager    : Fedora Project
Group       : Development/Languages
URL         : http://www.php.net/
Repository  : epel <----------
Summary     : Standard PHP module provides mcrypt library support
Source      : php-extras-5.3.3-1.el6.src.rpm
Description :
Standard PHP module provides mcrypt library support

Вы можете включить репо EPEL с инструкциями здесь:

http://fedoraproject.org/wiki / EPEL

-1
задан Mark Rotteveel 16 January 2019 в 18:19
поделиться

2 ответа

Вы не можете наследовать от класса и уменьшить видимость унаследованных методов. С другой стороны, код, который вы показываете, не использует наследование. Если вам нужно расширить класс (чтобы вы унаследовали все состояние и поведение от базового класса), но также не хотите показывать все унаследованные методы как публичные, вот способ сделать это:

public final class Derived {

    private final Base base = new Base() { // extending base class here

        @Override
        public void foo() {
            Derived.this.foo();
        }

        @Override
        public void bar() {
            Derived.this.bar();
        }
    };

    public void foo() {
        // Implement foo here
    }

    private void bar() {
        // Implement bar here
    }
}
[ 1111] Таким образом, идея заключается в том, чтобы инкапсулировать реализацию класса, расширяющего Base, в поле private final нового класса Derived, который предоставляет только метод foo, сохраняя при этом метод bar private , Этот анонимный внутренний класс просто делегирует методы класса Derived. В качестве дополнительной меры безопасности мы также делаем класс Derived final.

0
ответ дан Federico Peralta Schaffner 16 January 2019 в 18:19
поделиться

Вы не можете уменьшить видимость метода, унаследованного от

. Поэтому, если супер-метод общедоступен, вы не можете перейти к защищенному или частному

Этот вопрос уже охватывает этот вопрос: Невозможно уменьшить видимость метода, унаследованного от родителя

0
ответ дан sp00m 16 January 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: