章节五、2-Package包和权限修饰符

 一、Package包

为了更好的组织类,java提供了包机制,用于区别类名的命名空间。

包的作用:

1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名以此来区别。因此,包可以避免名字冲突。

3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

java中使用包这种机制是为了防止命名冲突,访问控制,提供搜索和定位类、接口、枚举、和注释等。

 

二、在eclipse中怎么创建包

找到需要创建包的java项目---》右键选择new---》Package---》给包命名(命名规则回顾第二章)---》finish

此处创建一个名为automibile的包:

 

然后我们introduction7包中创建一个BMW的类(每个类中的第一行都注明了该类所属包名):

 

三、权限修饰符

 

作用:用于控制被修饰变量、方法、类的可见范围。

public访问级别最高,起次是protected、默认、私有。

1、将前面(以前的章节)创建的Cars类和BMW类移动到automibile包中

2、在新建的automibile包中创建一个名为AccessModifierDome的类,在该类中new一个Cars对象,new完后可能会报错,这是因为在上一节中演示继承继承时在构造方法中添加了一个参数,所以此处必须在Cars类中写一个默认无参的构造函数(如果未出现此问题可以忽略):

3、默认:new了一个Cars对象后,调用Cars类中的变量speed,该变量权限修饰符为默认的,因为在同一个包中所以能够调用成功。(你们可以将该类移到到其其它包中然后在调用该变量,会发现程序报错,出现此原因是因为变量的默认权限只能在同一个包中才能被访问,如果跨包访问,程序就会报错)

4、私有:在Cars类中重新声明一个整形变量,权限为私有

复制代码
package automibile;  public class Cars {     int speed;     private int privateSpeed;     public Cars() {         this(0);     }     //创建一个构造方法    public Cars(int startSpeed) {         speed = startSpeed;     }          //创建一个名为increaseSpeed的方法    public void increaseSpeed() {         speed++;         System.out.println("cars 类的加速。。。");     }          //创建一个名为idcreaseSpeed的方法    public void idecreaseSpeed() {         speed--;         System.out.println("cars 类的减速。。。");     } }
复制代码

然后我们去AccessModifierDome类中调用这个变量,显示调用不成功,程序报错,因为被private修饰的变量只能在同一个类中被访问,

如果需要对提供访问,可以使用get和set方法,在Cars类中添加如下代码:

复制代码
package automibile;  import java.util.Set;  public class Cars {     int speed;     private int privateSpeed;     public Cars() {         this(0);     }     public void setprivateSpeed(int privateSpeed) {         this.privateSpeed = privateSpeed;     }          public int getprivateSpeed() {         return privateSpeed;     }      //创建一个构造方法    public Cars(int startSpeed) {         speed = startSpeed;     }          //创建一个名为increaseSpeed的方法    
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信