欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第2课第6节_Java面向对象编程_包和权限_P

程序员文章站 2022-06-16 17:26:13
...

 

1、使用package定义编译的时候存放的位置

package a.b.c.d;

public class Package {
    public static void main(String args[]){
        System.out.println("Hello,World");
    }
}

编译运行的命令如下:

第2课第6节_Java面向对象编程_包和权限_P

2、下图大致写出了引入包的作用,假如有两个人写了同样的一个类Math类,里面实现了不同的运算方法,我们可以通过目录来区分开来。

第2课第6节_Java面向对象编程_包和权限_P

代码主体的架构,lisi只实现了加法运算,zhangsan实现了加法的运算并且在运行结果上+2,且张三实现了减法运行。Package类通过import调用lisi和zhangsan不同的包。

lisi的Math.java代码如下

package a.b.c.d1;


public class Math{
    public static int add(int x,int y){
        return x + y;
    }
}

zhangsan的Math.java代码如下:

package a.b.c.d2;


public class Math{
    public static int add(int x,int y){
        return x + y + 2;
    }

    public static int sub(int x,int y){
        return x - y;
    }
}

Package.java代码如下

import a.b.c.d1.*;
import a.b.c.d2.*;

public class Package {
    public static void main(String args[]){
        System.out.println(a.b.c.d1.Math.add(1,2));
        System.out.println(a.b.c.d2.Math.add(1,2));

        System.out.println(a.b.c.d2.Math.sub(1,2));
    }
}

编译运行结果如下:

第2课第6节_Java面向对象编程_包和权限_P

第2课第6节_Java面向对象编程_包和权限_P

3、在上述的代码基础上在张三目录添加Print.java类,用于打印信息,在Package.java类中,可以通过包名来使用类的方法,如果该方法没有同名的类方法,可以不使用包名直接使用该方法.

Print.java

package a.b.c.d2;


public class Print{
    public static void printInfo(){
        System.out.println("package a.b.c.d2;");
    }
}

Package.java

import a.b.c.d1.*;
import a.b.c.d2.*;

public class Package {
    public static void main(String args[]){
        System.out.println(a.b.c.d1.Math.add(1,2));
        System.out.println(a.b.c.d2.Math.add(1,2));

        System.out.println(a.b.c.d2.Math.sub(1,2));

        a.b.c.d2.Print.printInfo();
        Print.printInfo();
    }
}

编译运行结果

第2课第6节_Java面向对象编程_包和权限_P

第2课第6节_Java面向对象编程_包和权限_P

4、张三、李四开发的代码,在编译之后都生成在a目录下面,我们可以把a目录打包成jar包之后,给用户,这样也可以不用开源自己的代码。使用jar把a目录压缩成jar包,并且在环境变量中添加my.jar包,主程序Package就可以使用,张三和李四实现的方法了。

添加环境变量暂时保留

第2课第6节_Java面向对象编程_包和权限_P

5、访问权限,

第2课第6节_Java面向对象编程_包和权限_P

public class可以被外包访问,class只能在本包中访问

Mymath.java

package b;
 
 //class Mymath{  编译失败
 public class Mymath{    
 }

Pack.java

package a;

public class Pack{
    public static void main(String args[]){
        Mymath m = new Mymath();
    }
}

编译java包失败,需要把Mymath定义成public才可以编译通

第2课第6节_Java面向对象编程_包和权限_P

重新编译

6、将5的代码Mymath类也定义在包a中,那样Mymath没有加public也可以在pack类中访问

Mymath.java

package a;

class Mymath{

//public class Mymath{
    
}

Pack.java

package a;
//import b.*;

public class Pack{
    public static void main(String args[]){
        Mymath m = new Mymath();
    }
}

编译结果:

第2课第6节_Java面向对象编程_包和权限_P

7、同一个包中,一个类的属性定义为private,无法被另外一个类访问。去掉private为默认属性,可以被另外一个类访问。

Mymath.java

package a;
 
 class Mymath{
     private int x;
      //int x;     去掉private则可以编译通过    
 }

Pack.java

package a;
//import b.*;

public class Pack{
    public static void main(String args[]){
        Mymath m = new Mymath();
        m.x = 0;
    }
}

编译运行结果

第2课第6节_Java面向对象编程_包和权限_P

8、使用protect定义属性,本包、其他包的子类可访问

Mymath.java

package b;
 
 public class Mymath{
     protected int x;
 }

Pack.java

package a;
import b.*;

class Mysubmath extends Mymath{
    void printInfo(){
        System.out.println("Mysubmath: x = " + x);
    }
}

public class Pack{
    public static void main(String args[]){
        Mysubmath m = new Mysubmath();
        //m.x = 0;
        m.printInfo();
    }
}

编译运行结果

第2课第6节_Java面向对象编程_包和权限_P

 

 

 

 

 

 

 

 

 

 

相关标签: java快速入门