准备结贴了,感谢大家的回复。 有些朋友没有明白我所要问的东西,我的问题不是java的类访问权限,这个我清楚,我想表达的意思是当一个类没有public修饰的时候,它的成员方法添加public修饰有没有什么意义: 因为当类的访问权限为空的时候,它就是默认的包访问权限,因此只有在同一个包的其他类才能访问这个类,所以它的成员方法不添加public也能被同一个包的其他类所访问(除了private)。我当时的想法是在这种情况下加这个public还有什么意义,反正加不加上去都是只有同一个包内的其他类才能访问。后来仔细想了想,这个public修饰还是有很大的意义的, 首先假设该类A 被同一个包内的其他类B继承,这个类B是public的(),因此能访问类B的其他类就能访问继承过来的public成员或方法,而不需要重载。还有如果这个类A实现了某个接口(接口的方法默认就是public),这样我们也可以调用这个接口的方法了。修改后的源码如下: 源文件1: //: test1/C.java //定义一个带有what()的接口 package test1;public interface C { void what(); }源文件:2: //: test1/B.java package test1; //类A实现了接口C class A implements C{ public A() {} public void what() { System.out.println("Class A"); } }public class B { private A a = new A(); //返回一个类A的实例对象 public A getA() { return a;} }源文件3:import test1.*; //外部类调用通过接口C来实现类A的what()方法调用 public class Test { public static void main(String[] args) { B b = new B(); C c = b.getA(); c.what(); } } 编译通过,运行后输出 Class A
一般来说,一个类与一个java文件一一对应。而且没有特殊需求的话我一般还是所所有的类都public了
public y y y y
protect y y y n
默认 y y n n
private n y n n
不知楼主要的是否是这!
1 默认修饰符 就是前面什么都没加,只能被同一个包中的类访问,你上面的例子,不是同一个包
2 public 公共修饰符,表示这个类可以被所有其它类访问
3 abstract 抽象类,不能实例化对象
4 final 最终类,不能被继承
我知道不加修饰符只能在同一个包里面访问,此时类的成员及方法不加public也能在包里面访问。
我的意思是如果类不加修饰符,是不是类的成员和方法加不加public一点作用也没有,如果有用的话在什么情况下可以发挥作用?
而方法和变量有4种:public、默认、protected、private
public意味着任何地方的其他类都能访问
默认则是同一个包的类可以访问 很显然你这代码是在同一个包中写的吗?你好好看看访问权限吧!!
如果所有的类都public那就达不到封装的要求了。
而包权限的(默认)类只是为同包的其他类的辅助类(可以这么认为)只能自己使用,而客户端不能调用,可以查阅下java核心类库的源代码就能有所了解了!多看看吧
public A() {}是构造方法他的类一定是PUBLIc的,希望能帮到你!!!
如果你当前的这个类对另一个类都无法实例化,也就是new,那么对于这个类来说另一个类的方法设置访问权限对它没有意义。总的说,访问方法的前提是需要访问到这个类。但是对于可以访问到非public类的类来说方法的访问权限是有意义的。
有些朋友没有明白我所要问的东西,我的问题不是java的类访问权限,这个我清楚,我想表达的意思是当一个类没有public修饰的时候,它的成员方法添加public修饰有没有什么意义:
因为当类的访问权限为空的时候,它就是默认的包访问权限,因此只有在同一个包的其他类才能访问这个类,所以它的成员方法不添加public也能被同一个包的其他类所访问(除了private)。我当时的想法是在这种情况下加这个public还有什么意义,反正加不加上去都是只有同一个包内的其他类才能访问。后来仔细想了想,这个public修饰还是有很大的意义的,
首先假设该类A 被同一个包内的其他类B继承,这个类B是public的(),因此能访问类B的其他类就能访问继承过来的public成员或方法,而不需要重载。还有如果这个类A实现了某个接口(接口的方法默认就是public),这样我们也可以调用这个接口的方法了。修改后的源码如下:
源文件1:
//: test1/C.java
//定义一个带有what()的接口
package test1;public interface C {
void what();
}源文件:2:
//: test1/B.java
package test1;
//类A实现了接口C
class A implements C{
public A() {}
public void what() {
System.out.println("Class A");
}
}public class B {
private A a = new A();
//返回一个类A的实例对象
public A getA() { return a;}
}源文件3:import test1.*;
//外部类调用通过接口C来实现类A的what()方法调用
public class Test {
public static void main(String[] args) {
B b = new B();
C c = b.getA();
c.what();
}
}
编译通过,运行后输出 Class A