Вызовите защищенный метод из другого пакета? - PullRequest
0 голосов
/ 20 апреля 2020
package1:
public class A{
    protected void Display(){
        System.out.println("Hello");
    }
}

package2:
import package1.*;

class C extends A{}

public class B{
    public static void main(String[] args){
        C var = new C();
        var.Display(); //error
    }
}

C является подклассом A. А Access Modifier protected означает тот же пакет или по наследству (может получить доступ из другого пакета по подклассам). Но когда я пытаюсь вызвать метод protected из другого пакета. Это не сработало.

Ответы [ 2 ]

2 голосов
/ 20 апреля 2020

protected виден подклассам. Если сам класс не является подклассом A, он не имеет доступа к методу (т. Е. Этот класс не может вызывать или ссылаться на метод).

B не является подклассом A. Даже если объект, для которого вызывается защищенный метод, является экземпляром подкласса A, сам B не имеет доступа к методу, поскольку он не является подклассом A.

. словами, вызов Display() будет действительным в C, а не в B через экземпляр C. Даже изнутри C это будет разрешено только для собственных экземпляров C.

1 голос
/ 20 апреля 2020

Вы получаете сообщение об ошибке, потому что Display является членом protected и, следовательно, оно видно в дочернем классе A, тогда как B не является дочерним классом A.

пакет1

package package1;
public class A{
    protected void Display(){
        System.out.println("Hello");
    }
}

пакет2

 package package2;

import package1.A;

class C extends A {
    public void someMethod() {
        Display();// No error
    }
}
public class B {
    public static void main(String[] args) {
        C var = new C();
        var.Display();// Error
    }
}

На заметку:

  1. Следовать Java соглашения об именах например, метод, Display должен быть назван как display.
  2. Попробуйте опубликовать безошибочный код компиляции. В опубликованном вами коде так много ошибок компиляции, например, вы пропустили ключевое слово package в объявлении пакета.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...