Java - Защищенный метод недоступен из подкласса

1
  • У меня есть следующий класс Foo, в котором есть основной метод.
  • Фу продлил Ни.
  • Класс Foo находится в com.package1, а класс Nee - в com.package2.
  • Проблема в том, что я не могу получить доступ к защищенному методу Nee, от класса Foo через свой объект. Почему это? (Где теория утверждает, что защищенные члены могут быть доступны подклассами или классами внутри одного и того же пакета)

Класс Foo выглядит следующим образом:

package com.package1;

import com.package2.Nee;

/**
  *
  * @author Dilukshan Mahendra
  */
public class Foo extends Nee{

    public static void main(String[] args) {
        Nee mynee = new Nee();
        /* mynee.sayProtected(); This gives me a compile error,
                                 sayProtected() has protected
                                 access in com.package2.Nee
        */
    }

}

Класс Nee похож на ниже,

package com.package2;

/**
 *
 * @author Dilukshan Mahendra
 */
public class Nee {



    protected void sayProtected(){

        System.out.println("I'm a protected method in Nee!");

    }



}
Теги:
access-modifiers

4 ответа

3
Лучший ответ

Как класс com.package1.Foo и класс com.package2.Nee находятся в двух разных пакетах, поэтому экземпляр класса Nee не позволит вам вызывать защищенный метод этого класса.

Создайте экземпляр Foo который является подклассом Nee затем вызовите защищенный метод.

Foo foo = new Foo();
foo.sayProtected()
  • 0
    Вы, вероятно, имели в виду "com.package1.Foo и класс com.package1.Nee"?
  • 2
    К сожалению! На самом деле вы, вероятно, хотите сказать "com.package1.Foo и класс com.package2.Nee", верно?
Показать ещё 2 комментария
1

Если вам ясно, что защищенный член не может получить доступ к внешнему пакету без подкласса, то не имеет значения, где вы создаете объект класса Nee для доступа к его защищенному методу либо в его подклассе, либо в любом другом месте. Это то же самое. Только подкласс знает об защищенном члене и может быть доступен через объект подкласса.

0

Защищенный позволяет получить доступ к элементу подкласса. Здесь вы пытаетесь получить доступ к защищенному члену Nee когда защита защищает только доступ защищенного члена к Foo.

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню