package 关键字:package 包名;
【举例】
如果很多事物,放的很杂乱,什么东西都往你的厨房里丢,无论是家用器具,还是洗衣机,还是马桶(恐慌)。那么必将很杂乱,无论是使用还是查找,都需要花费很多时间。所以必须分类后,封装起来。特别是马桶最好封装在卫生间这种地方。而不是厨房。
Java中也是如此,所以属性和行为封装到类中,那么类也需要归类。
需要用到package关键字。
注意:包名都用小写。如果是多级包。比如D:\Game\Moba\LOL,那就是package game.moba.lol;
在写代码的时候,会碰到很多跨包的代码。例如有Moba包中有LOL和DOTA两个包。那么都该如何访问他们的代码呢?
package game.moba.lol;
public class Character{
private String name;
public Character(String name){
this.name=name;
}
}
package game.moba.dota;
public class Character{
private String name;
public Character(String name){
this.name=name;
}
}
package test;
public class Demo{
public static void main(String[] args){
game.moba.lol.Character c=new game.moba.lol.Character("Riven");
game.moba.dota.Character c2=new game.moba.dota.Character("Mortred");
}
}
并且跨包访问时,类的访问修饰符必须是public,protected(特殊)
protected:若一个类由protected修饰,那么即使类是跨包的,其子类依旧能访问。仅限于子类。
表格
| 同类 | 同包 | 子类 | 异包 |
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
default | √ | √ | | |
private | √ | | | |
所由表格所示,能跨包的,按正常来说只有public修饰符,但是因为protected的特殊,其子类能跨包访问,所以也能达到目的。
同时private无法修饰类,只能修饰内部类,将其封装隐藏,不让其他类进行访问。
import 关键字:import 包名;
如果跨包时,需要频繁用到另一个包中的类名。每次都要打那么一大串。很麻烦,所以需要用俗称的导包
【例子】
package game.moba.lol;
public class Character{
private String name;
public Character(String name){
this.name=name;
}
}
package game.moba.dota;
public class Character{
private String name;
public Character(String name){
this.name=name;
}
}
package test;
import game.moba.lol.Character;
public class Demo{
public static void main(String[] args){
Character c=new Character("Riven");
}
}
如果一个包中有100个类,那怎么import?利用通配符“*”
import game.moba.lol.*; //但是最好一般每个类都导入一次
特殊情况一:如果有两个不同包,但确实同一个类。都需要实例化该如何进行?
解答:还是动手吧,打出包名。
package test;
import game.moba.lol.Character;
import game.moba.dota.Character;
public class Demo{
public static void main(String[] args){
game.moba.lol.Character c=new game.moba.lol.Character("Riven");
game.moba.dota.Character c2=new game.moba.dota.Character("yyyy")
}
}
特殊情况二:game\moba\lol(文件夹) HH.class\Character.class
若我import game.moba.*;能访问到Character吗?
解答:不行,只能访问到HH.class 若要访问Character,用import game.moba.lol.Character.class// *也行
所以都说是导包导包,其实导的是该类。