Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему здесь ошибка доступа? / 14 сообщений из 14, страница 1 из 1
08.02.2014, 22:53
    #38554686
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
Есть такой код:
Код: java
1.
2.
3.
4.
package base;
public class Parent {
       protected void doSomething(){}
}


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
package base.child;
import base.Parent;
public class child extends Parent {
    public static void main(String [] args){
        Parent parent = new child();
        parent.doSomething();//тут мне IDE гоаворит, что так нельзя
    }
}



Я не понимаю почему так нельзя делать. Ведь я нахожусь в методе потомка и могу иметь доступ к protected методам родителя.

Что я не так понимаю?
...
Рейтинг: 0 / 0
08.02.2014, 23:05
    #38554699
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
questionerЧто я не так понимаю?Может из-за protected ? Попробуйте заменить на public .
...
Рейтинг: 0 / 0
08.02.2014, 23:15
    #38554708
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
Usman, да именно из-за этого, но почему?
...
Рейтинг: 0 / 0
08.02.2014, 23:27
    #38554719
elitegroup
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
...
Рейтинг: 0 / 0
08.02.2014, 23:30
    #38554722
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
elitegroup,

Человека по понятиям интересует. Хотя здесь то как раз понятно. Мне вот до сих пор непонятно, почему из статического метода можно видеть приватные поля инстансов того же класса, тоже мне, инкапсуляция.
...
Рейтинг: 0 / 0
08.02.2014, 23:42
    #38554728
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
Лагманelitegroup,

Человека по понятиям интересует. Хотя здесь то как раз понятно. Мне вот до сих пор непонятно, почему из статического метода можно видеть приватные поля инстансов того же класса, тоже мне, инкапсуляция.

Вы кажется поняли, что меня интересует. может расскажете?
...
Рейтинг: 0 / 0
08.02.2014, 23:55
    #38554733
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
questionerВедь я нахожусь в методе потомка и могу иметь доступ к protected методам родителяВы находитесь в методе main(), который ниоткуда не отнаследовался и не имеет доступа к защищённым полям чужого класса.
...
Рейтинг: 0 / 0
09.02.2014, 00:08
    #38554734
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
Basil A. SidorovquestionerВедь я нахожусь в методе потомка и могу иметь доступ к protected методам родителяВы находитесь в методе main(), который ниоткуда не отнаследовался и не имеет доступа к защищённым полям чужого класса.

методы вроде не наследуются...

но этот метод находится в в классе, который отнаследован от родительского.

в общем я не понял вашей мысли.
...
Рейтинг: 0 / 0
09.02.2014, 00:18
    #38554743
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
Да просто спать пора :)
Вы не можете вызывать защищённые методы из чужого пакета.
Или создайте (наследующий) класс из собственного пакета или приведите тип класса из чужого пакета к типу собственного (наследующего) класса.
...
Рейтинг: 0 / 0
09.02.2014, 01:12
    #38554765
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
Basil A. Sidorov,

спать действительно пора)

придётся так запоминать, но какой-от общей концепции почему это так сделано я всё равно не понимаю.
...
Рейтинг: 0 / 0
09.02.2014, 05:41
    #38554812
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
ЛагманМне вот до сих пор непонятно, почему из статического метода можно видеть приватные поля инстансов того же класса, тоже мне, инкапсуляция. Access Levels:

ModifierClassPackageSubclassWorldpublicYYYYprotectedY Yes YNno modifierYYNNprivateYNNN
...
Рейтинг: 0 / 0
09.02.2014, 15:21
    #38554953
Alexey Tomin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
questionerпридётся так запоминать, но какой-от общей концепции почему это так сделано я всё равно не понимаю.

Дело в том, что статические методы в java находятся вне контекста ООП.
В отличии от банального delphi, где они часть _класса_, в java это по сути обычные процедуры.
То, что они имеют доступ ко всем переменным "своего" класса- тоже не очень логично, но запомнить можно.
...
Рейтинг: 0 / 0
09.02.2014, 22:31
    #38555120
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
Тоже недавно так-же баловался с ClassLoader'ом))
Пока классы Parent и Child в одном пакете это работает.
Для разных пакетов сделали такое исключение (я так думаю) для безопасности.
Было бы не очень хорошо так запросто стрелять себе в н дёргать protected методы объявленные, например, в классах JRE и переопределённые\реализованные в классах\пакетах других вендоров...

Child.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
package testparentchild;

import anotherpackage.AnotherImplementation;

public class Child extends Parent {
    public static void main(String[] args) {
        Parent parent = new AnotherImplementation();
        parent.doSomething();
    }
}

Parent.java
Код: java
1.
2.
3.
4.
5.
6.
7.
package testparentchild;

public class Parent {
    protected void doSomething() {
        System.out.println("It works");
    }
}

AnotherImplementation.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
package anotherpackage;

import testparentchild.Parent;

public class AnotherImplementation extends Parent {
    @Override protected void doSomething() {
        System.out.println("I still must be secure");
    }
}



ЛагманМне вот до сих пор непонятно, почему из статического метода можно видеть приватные поля инстансов того же класса, тоже мне, инкапсуляция.Вполне инкапсуляция. Вполне понятно и удобно.

Alexey TominТо, что они имеют доступ ко всем переменным "своего" класса- тоже не очень логично.Вполне логично.
...
Рейтинг: 0 / 0
10.02.2014, 09:08
    #38555272
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему здесь ошибка доступа?
Причём это справедливо и для instance методов. Я не могу вызывать protected методы через ссылку родительского класса т.к. там может лежать экземпляр и другого потомка, что нарушило бы инкапсуляцию. (Но в одном пакете также это работает.)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему здесь ошибка доступа? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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