Частное расширение в Java - PullRequest
       3

Частное расширение в Java

4 голосов
/ 26 февраля 2012

В C ++ мы можем расширить (извлечь) базовый класс в частном порядке до дочернего класса:

class Base
{
// ....
};

class Child : private Base
{
// ....
};

Каков соответствующий синтаксис Java? Если Javaне так, чем занимаются Java программисты?

Ответы [ 4 ]

3 голосов
/ 26 февраля 2012

Синтаксис Java для наследования:

class Base {}
class Child extends Base
{
  // ...
}

В Java нет частного наследования.Java имеет только публичное наследование.То есть вы оба наследуете реализацию и интерфейс.

При частном наследовании вы бы наследовали только реализацию.Насколько я помню, это в основном более статичная форма композиции.

В большинстве случаев вы можете использовать состав , чтобы сделать то же самое.

public class Child{
   private Base base;

   public Child(...){
       base = new Base(...);
   }
}
2 голосов
/ 26 февраля 2012

В определенной степени вы можете использовать закрытый внутренний класс для достижения аналогичного эффекта:

public class Base {

    private int privateMember = 10;

    private class Child extends Base {
        public Child() {
            System.out.println("I can see your privates: " + privateMember);
        }
    }

    public static void main(String[] args) throws Exception {
        Base t = new Base();
        Child c = t.new Child();
    }

}

При запуске приведенного выше кода на консоли выводится следующее сообщение:

I can see your privates: 10
1 голос
/ 26 февраля 2012

В C ++ частное наследование фактически означает: реализовано в терминах

т.е. это метод реализации, используемый, когда у вас есть 2 класса, у которых нет отношения is-a , но требуется доступ к защищенным элементам или необходимо переопределить его виртуальные функции.

Таким образом, по этому определению вы можете сделать это в Java, просто расширяя класс или используя композицию.

Синтаксис private просто недоступен, но вы можете получить тот же результат

1 голос
/ 26 февраля 2012

У Java нет эквивалента.

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