黑马程序员技术交流社区

标题: 包_03 [打印本页]

作者: Tauruszzy    时间: 2015-5-11 13:47
标题: 包_03
代码PackageDemo.java
  1. /*
  2. PackageDemo代码
  3. */
  4. package pack;
  5. class  PackageDemo
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 packa.DemoA d=new packa.DemoA();//类名为:包名.类名
  10.                 d.show();
  11.         }
  12. }
复制代码

代码DemoA
  1. package packa;
  2. public class DemoA extends packb.DemoB
  3. {
  4.     public void show()
  5.         {
  6.                 System.out.println("我是DemoA------");
  7.                 method();
  8.         }
  9. }
复制代码

代码 DemoB.java
  1. package packb;

  2. public class DemoB
  3. {
  4.         public void method()
  5.         {
  6.                 System.out.println("我是DemoB!!!!!!!!!!!");
  7.         }
  8. }
复制代码

dos行分别编译运行:
  1. /*
  2. e:\sourcefile>javac -d f:\myclass DemoB.java

  3. e:\sourcefile>javac -d f:\myclass DemoA.java

  4. e:\sourcefile>javac -d f:\myclass PackageDemo.java

  5. e:\sourcefile>java pack.PackageDemo
  6. 我是DemoA------
  7. 我是DemoB!!!!!!!!!!!
  8. */
复制代码

然后,单独修改PackageDemo.java代码,单独建立DemoB的对象,并运行
  1. /*
  2. PackageDemo代码
  3. */
  4. package pack;
  5. class  PackageDemo
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 //packa.DemoA d=new packa.DemoA();//类名为:包名.类名
  10.                 //d.show();
  11.                 packb.DemoB b=new packb.DemoB();
  12.                 b.method();
  13.         }
  14. }
复制代码

运行结果:
  1. e:\sourcefile>javac -d f:\myclass PackageDemo.java

  2. e:\sourcefile>java pack.PackageDemo
  3. 我是DemoB!!!!!!!!!!!
复制代码

表明也可以!
那么问题来了,请看,当DemoB中方法的权限改为protected之后,PackageDemo.java编译后还能运行吗?
改变之后,先编译DemoB.java再编译PackageDemo.java,结果PackageDemo.java不能通过编译。
  1. package packb;

  2. public class DemoB
  3. {
  4.         protected void method()
  5.         {
  6.                 System.out.println("我是DemoB!!!!!!!!!!!");
  7.         }
  8. }
复制代码

  1. /*
  2. PackageDemo代码
  3. */
  4. package pack;
  5. class  PackageDemo
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 //packa.DemoA d=new packa.DemoA();//类名为:包名.类名
  10.                 //d.show();
  11.                 packb.DemoB b=new packb.DemoB();
  12.                 b.method();
  13.         }
  14. }
复制代码

但是当PackageDemo.java调用DemoA时可以
  1. /*
  2. PackageDemo代码
  3. */
  4. package pack;
  5. class  PackageDemo
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 packa.DemoA d=new packa.DemoA();//类名为:包名.类名
  10.             d.show();
  11.                 //packb.DemoB b=new packb.DemoB();
  12.                 //b.method();
  13.         }
  14. }
复制代码

编译通过,并能运行。
说明protected的作用。不同包中的子类可以直接访问父类中被protected修饰的成员。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2