[19]package 包

版权声明:嘤嘤嘤,小白的东西,大牛们应该看不上吧。 https://blog.csdn.net/qq_37384180/article/details/83217804

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// *也行

所以都说是导包导包,其实导的是该类。

猜你喜欢

转载自blog.csdn.net/qq_37384180/article/details/83217804