powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему здесь ошибка доступа?
14 сообщений из 14, страница 1 из 1
Почему здесь ошибка доступа?
    #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
Почему здесь ошибка доступа?
    #38554699
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerЧто я не так понимаю?Может из-за protected ? Попробуйте заменить на public .
...
Рейтинг: 0 / 0
Почему здесь ошибка доступа?
    #38554708
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman, да именно из-за этого, но почему?
...
Рейтинг: 0 / 0
Почему здесь ошибка доступа?
    #38554719
elitegroup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Почему здесь ошибка доступа?
    #38554722
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
elitegroup,

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

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

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

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

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

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

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

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

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

Дело в том, что статические методы в java находятся вне контекста ООП.
В отличии от банального delphi, где они часть _класса_, в java это по сути обычные процедуры.
То, что они имеют доступ ко всем переменным "своего" класса- тоже не очень логично, но запомнить можно.
...
Рейтинг: 0 / 0
Почему здесь ошибка доступа?
    #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
Почему здесь ошибка доступа?
    #38555272
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Причём это справедливо и для instance методов. Я не могу вызывать protected методы через ссылку родительского класса т.к. там может лежать экземпляр и другого потомка, что нарушило бы инкапсуляцию. (Но в одном пакете также это работает.)
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему здесь ошибка доступа?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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