黑马程序员技术交流社区

标题: 关于包的问题,求助 [打印本页]

作者: 491138002    时间: 2014-3-31 10:34
标题: 关于包的问题,求助
  1. package packb;
  2. public class  DemoB
  3. {
  4.         protected void method(){
  5.                 System.out.println("DemoB method run");
  6.        
  7.         }
  8. }
  9. package packa;
  10. public class DemoA extends packb.DemoB
  11. {
  12.         public void show(){
  13.                 System.out.println("DemoA show run");
  14.                
  15.         }
  16. }
  17. package pack;

  18. class PackageDemo
  19. {
  20.         public static void main(String[] args)
  21.         {
  22.                 packa.DemoA d = new packa.DemoA();
  23.                 d.show();
  24.                 d.method();
  25.         }
  26. }
复制代码
为什么对象d不能访问method方法呢?

QQ截图20140331103326.png (4.68 KB, 下载次数: 16)

运行结果

运行结果

作者: ehuashao    时间: 2014-3-31 11:01
一. protected 访问控制符能被用于方法和成员变量。
二. 声明为protected的方法和成员变量能被同一个包里的所有类所访问,就像默认修饰符package一样。
三. 能被该类的子类所访问,子类可以和父类不在一个包中。
    这样,当你想让一个类中的某个方法或成员变量在包中都可见,而且其子类也能访问(子类有可能和父类不在同一个包中)但又不想让所有类都可以访问该类时,就可以用protected修饰符。
子类和父类可以不在一个包中,但是必须要在子类内部调用父类的protected方法:
  1. public class DemoA extends packb.DemoB
  2. {
  3.        
  4.         public void show(){
  5.                 System.out.println("DemoA show run");
  6.                
  7.                 new DemoA().method();
  8.         }
  9. }
复制代码

比如上面代码,在子类A中就可以调用父类的method方法了。
作者: 黄晓鑫    时间: 2014-3-31 11:02
本帖最后由 黄晓鑫 于 2014-3-31 11:04 编辑

不同包中要加包名访问 类名.包名.类名.方法
作者: osully    时间: 2014-3-31 11:04
protected

只能在其子类中调用此修饰符修饰的方法




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