Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there any reason for public methods in a package protected class?

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?

like image 922
tangens Avatar asked Apr 17 '13 20:04

tangens


2 Answers

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();
  }
}
like image 176
AllTooSir Avatar answered Oct 12 '22 02:10

AllTooSir


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.

like image 39
duffymo Avatar answered Oct 12 '22 03:10

duffymo