Java-hb-39包

1、编译运行含有包层的类

package zhangsan.lisi;//必须放放第一条语句

class A{
    public void f(){
        System.out.printf("AAAA\n");
    }
}

class M{
    public static void main(String[] args) {
        new A().f();    
    }
}
  1. 使用javac bao.java编译需要手动建立包目录
  2. 使用javac -d . bao.java自动生成包目录
    -d表示自动生成包层
    .表示这个包层是在当前目录下建立
  3. 类A和M在zhangsan文件夹里的lisi文件夹里面java zhangsan.lisi.M
  4. 这时类的真正名字包名和类名的组合
  5. 如果不在当前路径运行程序,则必须保证class文件的最上层目录的父目录,位于classpath下
    set classpath 查看环境变量
    set classpath=E:\课程\JAVA\11包设置环境变量,这样就可以在其他路径运行程序
    (先检测当前目录有没有zhangsan.lisi这个包,如果有,再检测是否有zhangsan.lisi.bao这个类,如果没有编译器再去classpath路径中查找,如果查找失败,则运行出错)

    2、同包和不同包类的相互访问

    1. 同包

A.java

class A{
    public void f(){
        System.out.printf("AAAA\n");
    }
}

B.java

class B{
    public static void main(String[] args) {
        A aa = new A();
        aa.f();
    }
}

两个文件放同意文件默认同包
同一个包的私有的不能被另一个类访问。

2. 不同包
A.java

package zhangsan.lisi;

public class A{
    public void f(){//注意都加了public
        System.out.printf("AAAA\n");
    }
}

B.java

package com.ruide;

class B{
    public static void main(String[] args) {
        zhangsan.lisi.A aa = new zhangsan.lisi.A();
        aa.f();
    }
}

javac -d . A.java B.java
java com.ruide.B
输出AAAA
只有公有类的公有成员才能被另外一个包访问。

  • B.java也可以写为
package com.ruide;

//import zhangsan.lisi.*;
import zhangsan.lisi.A;

class B{
    public static void main(String[] args) {
        A aa = new A();
        aa.f();
    }
}

import zhangsan.lisi.*;将整个包都导进来了
import zhangsan.lisi.A;只导入这一个类

  • 有关继承

A.java

package zhangsan.lisi;

public class A{
    public void g(){
        System.out.printf("GGGG\n");
    }
    protected void b(){
        System.out.printf("BBBB\n");
    }
}

B.java

package com.ruide;
import zhangsan.lisi.*;

class B extends A{
    public void f(){
        g();
        b();
    }
}
class M{
    public static void main(String[] args) {
        B bb = new B();
        bb.f();//OK
        bb.g();//OK
        bb.b();//error
    }
}

在不同包中有继承关系的两个类,只有public类的public成员和public类的protected成员可以被另一个包中的子类在内部使用,但是在子类的外部,通过子类对象名只能访问父类的public成员。

猜你喜欢

转载自www.cnblogs.com/aabyss/p/12331512.html
39