Question

I wonder if it makes any difference if a method is public or package protected in a class that is package protected.

class Example {
  public void test() {}
}

instead of

class Example {
  void test() {}
}

I guess the maximum visibility is given by the class. And a method can only reduce the visibility and increasing the visibility has no effect.

But it's valid syntax, so perhaps I've overseen something?

Était-ce utile?

La solution

If we subclass Example to a public class , then code outside the package can access test() method using the subclass instance if it is public .

Example:

package A;
class Example {
   public void test() {}
}

package A;
public class SubExample extends Example {
}

package B;
import A.SubExample;
class OutsidePackage {
  public void some method(SubExample e){
    // Had test been defined with default access in class Example
    // the below line would be a compilation error.
    e.test();
  }
}

Autres conseils

If Example implemented an interface of some kind you'd have to make them public, because you can't reduce access in that case. All interface methods are, by default, public.

As written, it does nothing. If it's a subclass or interface implementation, then it may be implementing or overriding methods that are declared public elsewhere.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top