package import

本文详细介绍了Java中包的概念及使用方法,包括如何定义包、编译与运行带包的程序,以及不同访问修饰符在同包和跨包访问中的作用。同时,还讲解了在继承关系中不同修饰符对成员的访问权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*package的使用
1.package语句必须得是第一条语句
2.package zhangsan.lisi表示:把该文件中所有的类放入zhangsan.lisi这个包中,并且该文件中所有的类真正名字将是包名和类名的组合
3.如:类TestPackage的名字将变成zhangsan.lisi.TestPackage,而不再是TestPackage
4.编译是建议使用javac -d.TestPackage.java,尽量不要使用javac TestPackage.java。因为后者要自己手动建立包目录
javac -d .A.java//javac空格-d空格.空格A.java
-d表示自动生成包层
.表示这个包层是在当前目录下建立的
5。如果不在当前路径不运行程序则必须保证class文件的最上层目录的父目当位于classpat下。
dos命令:set classpath查看当前路径
set classpath = .....设置路径




  java zhangsan.lisi.TestPackage解析
--先检测当前目录下是否有zhangsan/lisi这个包(包即文件夹),如果有,再检测包下是否有zhangsan.lisi.TestPackage这个类,如果没有,编译器将会再去classpath设置的路径中依次查找。如果都查找失败,则编译出错。
*/
package zhangsan.lisi;//在zhangsan文件夹lisi文件夹下放TestPackage.class和M.class
class A
{
  public void f()
  {
    System.out.printf("AAAA\n");
  } 
}
class TestPackage
{
   public static void main(String[] args)
   {
      new A().f();//运行时打java zhangsan.lisi.M
   }

}

------------------------------------------------------------------------

同包访问

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


+++++++++++

class B

{

 public static void main(String[] args)

 {

  A aa = new A();

  aa.f();

 }

}

/*同包不同类的相互访问

执行命令如下:javac A.java B.java

              java B

输出结果:AAAA

附注:因为类A和类B默认是在同一个无名的包中所以彼此可以相互访问,只要是非私有的成员都可以被同包的另一个类访问

----------------------------------------------------------------------------

不同包访问

/*不同访问修饰符(重点)
1.在同一个包中只有私有的不能被另一个类访问,也只有私有的不能被继承
2.在不同包没有任何关系的两个类,只有public类的public成员才可以被另一个包中的类访问
3.在不同包中有继承关系的两个类,只有public类的public成员和public类的protected成员可以被另一个包中的子类在内部使用,但是在子类的外部,通过子类对象名只能访问父类的public成员
*/
package zhangsan.lisi;
public class A//要加上public 
{
public void f()//同上
{
System.out.printf("AAAA\n");
}
}
//只有公有的才能被另一个包访问


//编译:javac -d . A.java B.java
//运行 java com.ruide.B


+++++

package com.ruide;
//import zhangsan.lisi.*;//把zhangsan.lisi文件夹下所有的类加载进来
//import zhangsan.lisi.A//把zhangsan.lisi文件夹A类加载进来
class B
{
    public static void main(String[] args)
    {
    //zhangsan.lisi.A aa = new zhangsan.lisi.A();
    A aa= new A();
    aa.f();
    }
}

----------------------------------------------------------------------------------------

继承

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


++++++++++

package com.ruide;
import zhangsan.lisi.*;
class B extends A
{
public void f()
{
   g();//ok
 b();//ok, 在子类内部可以访问从另一个包继承过来的父类的public和protected成员
}
}
class M 
{
public static void main(String[] args)
{
B bb = new B();
//bb.f();//ok
//bb.g();//ok
bb.b();//错误。要改为public
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值