Почему быстрое увеличение лицензий Open Source? [закрытый]

Прежде всего Что подразумевается под методом Hiding?

Метод скрытия означает, что подкласс задает метод класса с той же сигнатурой, что и метод класса в суперклассе. В этом случае метод суперкласса скрыт подклассом. Это означает, что: версия метода, который будет выполнена, будет NOT определяться объектом, который используется для его вызова. Фактически это будет определяться ссылочной переменной типа, используемой для вызова метода .

Что подразумевается под переопределением метода?

Подкласс класса переопределения метода определил метод экземпляра с тем же типом сигнатуры и возвращаемого типа (включая ковариантный тип) в качестве метода экземпляра в суперклассе. В этом случае метод суперкласса переопределяется (заменяется) подклассом. Это означает, что: версия метода, который выполняется , будет , определяемой объектом, который используется для его вызова. Он не будет определяться типом ссылочной переменной, используемой для вызова метода .

Почему статические методы нельзя переопределять?

Поскольку статические методы разрешаются статически (т. е. во время компиляции) на основе класса, на который они вызывают, а не динамически, как в случае с методами экземпляра, которые разрешены полиморфно на основе типа среды выполнения объекта.

Как обращаться к статическим методам?

Статические методы должны быть доступны статическим способом. т.е. по имени самого класса, а не с помощью экземпляра.

Вот краткий демонстрационный метод для переопределения и скрытия метода:

class Super
{
  public static void foo(){System.out.println("I am foo in Super");}
  public void bar(){System.out.println("I am bar in Super");}
}
class Child extends Super
{
  public static void foo(){System.out.println("I am foo in Child");}//Hiding
  public void bar(){System.out.println("I am bar in Child");}//Overriding
  public static void main(String[] args)
  {
     Super sup = new Child();//Child object is reference by the variable of type Super
     Child child = new Child();//Child object is referenced by the variable of type Child
     sup.foo();//It will call the method of Super.
     child.foo();//It will call the method of Child.

     sup.bar();//It will call the method of Child.
     child.bar();//It will call the method of Child again.
  }
}

Выходной файл

I am foo in Super
I am foo in Child
I am bar in Child
I am bar in Child

Очевидно, как указано, так как foo - это метод класса, поэтому вызванная версия foo будет определяться типом ссылочной переменной (например, Super или Child), ссылающейся на объект Child. Если на него ссылается переменная Super, то вызывается foo из Super. И если на него ссылается переменная Child, то вызывается foo из Child. В то время как , так как bar - это метод экземпляра, поэтому вызываемая версия bar определяется только объектом (например, Child), который используется для его вызова. Независимо от того, через какую ссылочную переменную (Super или Child) она вызывается, метод, который будет вызываться, всегда имеет значение Child.

12
задан Community 10 September 2008 в 05:13
поделиться

8 ответов

Это - известная проблема: Инициатива С открытым исходным кодом имеет Комитет по Быстрому увеличению Лицензии, который рекомендует использование одной из восьми лицензий, которые "популярны и широко используемые или с сильными сообществами".

  1. Лицензия Apache, 2.0
  2. Новая лицензия BSD
  3. Генеральная общедоступная лицензия GNU (версия 2 или 3 GPL)
  4. Библиотека GNU или "Меньшая" Стандартная общественная лицензия (версия 2.1 или 3 LGPL)
  5. Лицензия MIT
  6. Лицензия 1.1 общественности Mozilla (MPL)
  7. Общая лицензия разработки и распределения
  8. Лицензия общественности Eclipse

Другие лицензии классифицированы как: "избыточный" (например, лицензия NCSA избыточна с BSD), "специальное использование" или "одноразового использования" (например, лицензия НАСА, Исходная Лицензия Общественности Apple), "замененный" (например, MPL v1.0), и так далее.

18
ответ дан 2 December 2019 в 04:34
поделиться

Наличие Вашей собственной лицензии (обычно вариант на одном из существующих) позволяет Вам полный контроль над ним. Я подозреваю, что вещи как огромное изменение между GPL2 и GPL3 (особенно, если Вы имеете дело с веб-сервисами) делают людей подозрительным лицензированием с соглашением за пределами управления.

5
ответ дан 2 December 2019 в 04:34
поделиться

Я также думаю, что некоторые лицензии тесно связываются с определенными идеологиями. У многих пользователей лицензии Creative Commons есть то же отношение к законодательству авторского права. GPL, с другой стороны, имеет долгую историю с разработкой Linux. Человек или организация, которая не соглашается с основными положениями обычно, присоединяли определенную лицензию, может принять решение искать альтернативу.

4
ответ дан 2 December 2019 в 04:34
поделиться

Наличие Вашей собственной лицензии (обычно вариант на одном из существующих) позволяет Вам полный контроль над ним. Я подозреваю, что вещи как огромное изменение между GPL2 и GPL3 (особенно, если Вы имеете дело с веб-сервисами) делают людей подозрительным лицензированием с соглашением за пределами управления.

Я думаю, что это верно в некоторой степени. Однако, когда Вы лицензируете под GPL, у Вас есть опция сказать, "Версия 2", "Версия 2 или позже". Если Вы хитры о том, как лицензия может измениться в будущем, Вы свободны просто сказать, что это лицензируется под той определенной версией.

3
ответ дан 2 December 2019 в 04:34
поделиться

Является быстрое увеличение лицензий Open Source просто другим примером программистов, живущих NYI (Не Изобретенный Здесь) синдром?

По моему скромному мнению, да, абсолютно. Возьмите лицензию Microsoft PL в качестве примера. Это абсолютно избыточно. Однако, мне нравится этот много, потому что он очень ясно сформулирован, намного короче, чем большинство других лицензий и обеспечивает хорошую сумму свободы.

С другой стороны, обработка новой лицензии чревата рисками потому что, пока это не доказало свою ценность перед фактическим судом, это не стоит бумаги, которая она записана на (если таковые имеются).

По моему скромному мнению, существует очень немного лицензий, которые стоит знать и использовать среди них GPL (который я лично не люблю), LGPL, BSD и МН г-жой, и конечно лицензии Creative Commons, но они не подходят для программного обеспечения.

1
ответ дан 2 December 2019 в 04:34
поделиться

Я думаю, что это верно в некоторой степени. Однако, когда Вы лицензируете под GPL, у Вас есть опция сказать, "Версия 2", "Версия 2 или позже". Если Вы хитры о том, как лицензия может измениться в будущем, Вы свободны просто сказать, что это лицензируется под той определенной версией.

Это открывает другую кучу проблем, все же.

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

1
ответ дан 2 December 2019 в 04:34
поделиться

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

Который поднимает некоторые другие вопросы. Вы планируете принять патчи от внешних разработчиков? То, когда Вы действительно признаете, что патчи делают Вас, требует, чтобы патч submitters передал авторское право также? Если они не передают авторское право, как это позволяет Вам изменять свою собственную лицензию на будущие соображения. Если был проект с их собственной лицензией, и я собирался выпустить набор кода к нему, это указало, что лицензировалось под версией N XYX или какой-либо будущей версией, то, что должно сказать, что люди, управляющие той лицензией, не сделают полных 180 на будущей версии и сделают ее абсолютно закрытым исходным кодом?

0
ответ дан 2 December 2019 в 04:34
поделиться

Я не думаю, что люди понимают, что вы часто не можете связать код с разными лицензии, тогда как, например, вы можете комбинировать любой код GPLv2 с любым другим кодом GPLv2.

1
ответ дан 2 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

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