12.1 类的可访问性
1、在很多情况下,我们需要一定的封装性实现信息隐藏,
2、类的可访问性是指当前类可被其他类所访问的程度,
3、通过不同的可访问性修饰符可以体现程序的封装性。
类的可访问性修饰符:
- public——修饰的类可被其他任意类所访问,即可展示给所有的类使用。
- 默认访问控制属性——只能被当前包中的类所访问,即只能展示给当前包中的类使用。
12.1.1 public——具有最好的公开性
关键字public修饰的类具有最大的可被访问性。都可以被任何其他类所访问,无论其他类在当前包中,还是在其他地方。
在使用public修饰类时,必须保证一个包中,也就是在一个.java程序中,只能有一个public类。这个类作为整个.java文件的接口,实现文件内类的封装。
//MyClass.java package mypackage; //创建包文件 public class MyClass { public void sumTwo(int i, int j) { System.out.println(i+j); } }
编译通过,生成包mypackage,包中保存MyClass.class文件。
接下来创建新的应用程序,不在当前包中。
//Example1201.java import mypackage.MyClass; //或使用import mypackage.*; public class Example1201 { public static void main(String[] args) { MyClass mc = new MyClass(); mc.sumTwo(12,34); } }
程序调用前面包中的文件。
- public修饰的类MyClass具有最好的可被访问性,无论Example1201类在任何地方,都可以使用MyClass类。
- 在调用该类时,需要首先导入该类,即用import语句定位并导入该类。
12.1.2 默认访问——只能被同一个包中的类访问
默认访问属性(无访问控制符)说明该类只能被同一个包中的类所访问,包外的类无法生成该类的对象。这样,就使类具有了封装性能。
//MyClass.java package mypackage; //创建包文件 class MyClass //默认访问属性,无"public" { public void sumTwo(int i, int j) { System.out.println(i+j); } }
//Example1201.java import mypackage.MyClass; //或使用import mypackage.*; public class Example1201 { public static void main(String[] args) { MyClass mc = new MyClass(); mc.sumTwo(12,34); } }
包外的Example1201类不能调用到MyClass类,因为MyClass不是public。
解决方法2种:1、MyClass类加public修饰符,变成public的;
2、将Example1201类和MyClass类写进同一个包中。