A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Tauruszzy 中级黑马   /  2015-5-11 13:47  /  268 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

代码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修饰的成员。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马