1、Package包java
为了更好的组织类,java提供了包机制,用于区别类名的命名空间。eclipse
包的做用:ide
一、把功能类似或相关的类或接口组织在同一个包中,方便类的查找和使用。函数
二、如同文件夹同样,包也采用了树形目录的存储方式。同一个包中的类名字是不一样的,不一样的包中的类名字是能够相同的,当同时调用两个不一样包中相同类名的类时,应该加上包名以此来区别。所以,包能够避免名字冲突。this
三、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。spa
java中使用包这种机制是为了防止命名冲突,访问控制,提供搜索和定位类、接口、枚举、和注释等。code
2、在eclipse中怎么建立包对象
找到须要建立包的java项目---》右键选择new---》Package---》给包命名(命名规则回顾第二章)---》finishblog
此处建立一个名为automibile的包:继承
而后咱们introduction7包中建立一个BMW的类(每一个类中的第一行都注明了该类所属包名):
3、权限修饰符
做用:用于控制被修饰变量、方法、类的可见范围。
public访问级别最高,起次是protected、默认、私有。
一、将前面(之前的章节)建立的Cars类和BMW类移动到automibile包中
二、在新建的automibile包中建立一个名为AccessModifierDome的类,在该类中new一个Cars对象,new完后可能会报错,这是由于在上一节中演示继承时在构造方法中添加了一个参数,因此此处必须在Cars类中写一个默认无参的构造函数(若是未出现此问题能够忽略):
三、默认:new了一个Cars对象后,调用Cars类中的变量speed,该变量权限修饰符为默认的,由于在同一个包中因此可以调用成功。(大家能够将该类移到到其它包中而后再调用该变量,会发现程序报错,出现此缘由是由于变量的默认权限只能在同一个包中才能被访问,若是跨包访问,程序就会报错)
四、私有:在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的方法 public void increaseSpeed() { speed++; System.out.println("cars 类的加速。。。"); } //建立一个名为idcreaseSpeed的方法 public void idecreaseSpeed() { speed--; System.out.println("cars 类的减速。。。"); } }
在AccessModifierDome类中调用:
package automibile; public class AccessModifierDome { public static void main(String[] args) { Cars c1 = new Cars(); c1.speed = 10; c1.setprivateSpeed(20); System.out.println(c1.getprivateSpeed()); } }
打印结果为:20
五、public公共权限:只要导入了这个包和这个类,在任何其它类中均能访问。
六、protected受保护权限:在Cars中定义一个该类型的变量,将decreaseSpeed方法权限改成私有权限,
咱们先在同一个包中的AccessModifierDome类调用,查看是否能调用成功,
而后咱们打开包名为introduction7中的InheritanceDemo类,而后调用Cars类中的变量和方法,查看调用是否成功,
接下来咱们在继承了Cars类的BMW类中调用(Cars类和BMW在同一个包中),经过实例化和直接调用两种方式查看调用是否成功,
而后咱们在一样继承了Cars的Demo类中(Demo属于包名为introduction7中),经过一样的两种方式查看调用是否成功,
总结:受保护权限的变量或只有如下几种方式能被成功调用
一、同包同类
二、同包不一样类
三、同包不一样类时,调用者和非调用者存在继承关系时,只能直接访问,不能在实例化对象后访问