This page contains an archived post to the Java Answers Forum made prior to February 25, 2002.
If you wish to participate in discussions, please visit the new
Artima Forums.
Message:
Sorry for the long message !! revert back if I have got your question wrong
Posted by Sridhar Visvanath on November 17, 2000 at 1:11 AM
import mylib.*; class Client { public static void main(String[]args) { InDirectAccess ia = new InDirectAccess(); /* try uncommenting the following line and you will get a compile-time error that you can't access the class because DirectAccess is not a public class and a package class and hence available only within its package. The public int in DirectAccess carries any meaning only if the class to which it belongs , in this case DirectAccess , has a public access, which is not true as DirectAccess is available only within it's package mylib The access specifiers for classes supersedes that of its variables. When you cannot enter a country (say USA) how will you be able to enter a city (say Buffalo) in that country. similarly When you cannot enter a class (DirectAccess) how will you be able to access it variable (Integer var ) in that class. You can say that Buffalo is inaccessible inside USA even though the other parts of the USA are accessible by saying that Buffalo is private . similarly had your class DirectAccess been available to the Client , then you can prevent them from accessing the Integer var by making that var private You can however access a ref obj to the DirectAcces from the InDirectAccess because the IndirectAccess is public and the obj var is not private / protected / default but public. */ //DirectAccess da = new DirectAccess(); } } > //DirectAccess.java > package mylib;
> class DirectAccess { > public Integer var = new Integer(10); > } > ------------------------------------------------------ > //IndirectAccess.java > package mylib; > public class IndirectAccess { > public DirectAccess obj= new DirectAccess(); > } > ------------------------------------------------------ > //client.java > import mylib.*; > class client { > public static void main(String arg[]) { > IndirectAccess ia = new IndirectAccess(); > System.out.println(ia.obj.var); > } > } > ------------------------------------------------------ > compile client.java, got complaint: > client.java:6: The type mylib.DirectAccess to which the member var belongs is > not accessible from class client. > System.out.println(ia.obj.var); > ^ > 1 error > > MY QUESTION IS: > in class DirectAccess: wheather var is public or default doesn't make any difference, why wouldn't compiler > complain about this, because if there is no way for any class outside mylib package to access "var", then > its modifier "public" only cause confusion. > Thanks, > John
Replies:
|