Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по attempting to assign weaker access privileges / 2 сообщений из 2, страница 1 из 1
23.04.2013, 15:11:36
    #38236738
ozzmosis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по attempting to assign weaker access privileges
Здравствуйте.

Допустим, сначала было два класса, разработанные разными людьми: родитель (Rock) и наследник (BlackSabbath).
Код: java
1.
2.
3.
4.
5.
6.
7.
// file = ch1base/Rock.java
package ch1base;
public class Rock {
  public void whoIsThis() {
    System.out.println( "You're listening to the "+this.getClass().getName()+" band." );
  }
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
// file = ch1band/BlackSabbath.java
package ch1band;
import ch1base.*;
public class BlackSabbath extends Rock {
  public static void main (String[] args) {
     new BlackSabbath().run(); 
  }
  public void run() {
    whoIsThis();
    start();
  }
  private void start() {
    System.out.println("OK, let's go for \"Iron Man\"... Let me see your f*ing hands!");
  }
}



Всё это хоз-во нормально компилируется и запускается:

Код: plaintext
1.
2.
3.
4.
5.
6.
D:\JAVA\java1probe\cert>javac ch1base/Rock.java

D:\JAVA\java1probe\cert>javac ch1band/BlackSabbath.java

D:\JAVA\java1probe\cert>java ch1band/BlackSabbath
You're listening to the ch1band.BlackSabbath band.
OK, let's go for "Iron Man"... Let me see your f*ing hands!

Если далее в родительском классе его разраб добавит метод protected start() :
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
package ch1base;
public class Rock {
  public void whoIsThis() {
    System.out.println( "You're listening to the "+this.getClass().getName()+" band." );
  }
  protected void start() {
    System.out.println( "Preparing to the rock session: tuning the sound..." );
  }
}

- то все наследнички перестанут компилироваться, т.к. будет выдана ошибка:

Код: plaintext
1.
2.
3.
4.
5.
D:\JAVA\java1probe\cert>javac ch1band/BlackSabbath.java
ch1band\BlackSabbath.java:11: start() in ch1band.BlackSabbath cannot override start() in ch1base.Rock; attempting to assign w
eaker access privileges; was protected
  private void start() {
               ^
1 error

Как-то плохо получается. Разработчик родительского класса, если от него кто-то уже создал производные классы, не может (в общем случае) добавлять к своему классу никакие методы, за исключением private.
И как выкручиваться в таком случае тому, кто сбацал родительский класс и далее хочет его "нарастить" ?
...
Рейтинг: 0 / 0
23.04.2013, 16:15:39
    #38236896
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по attempting to assign weaker access privileges
Проблема высосана из пальца.
Если это в контексте одного проекта, то проблема выявляется и рефакториться как надо.
Если это в контексте публичного фреймверка, то это уже проблемы клиентов. Поставят новую версию. Сломается сборка. Поправят и будут жить дальше.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по attempting to assign weaker access privileges / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]