黑马程序员技术交流社区

标题: 关于static的问题 [打印本页]

作者: 田富丰    时间: 2013-4-27 11:52
标题: 关于static的问题
本帖最后由 田富丰 于 2013-4-27 23:31 编辑
  1. //第一个java文件
  2. package c;
  3. public class PackageDemo3
  4.              {
  5.                      protected static void show1()
  6.                     {
  7.                                   System.out.println("hello PackageDemo3");
  8.                      }
  9. }
  10. //第二个java文件
  11. package b;
  12. public class PackageDemo2
  13. {
  14.                      public void show()//这里为什么不用静态修饰
  15.                     {
  16.                                   System.out.println("hello PackageDemo2");
  17.                     }

  18. }
  19. //第三个java文件
  20. package a;
  21. class PackageDemo extends c.PackageDemo3
  22. {
  23.                    public static void main(String[] args)
  24.                  {
  25.                         
  26.                             //c.PackageDemo3 p1 = new c.PackageDemo3();
  27.                            //p1.show1();
  28.                              b.PackageDemo2 p = new b.PackageDemo2();
  29.                              p.show();
  30.                   }
  31. }
复制代码

作者: hmr8    时间: 2013-4-27 11:59
包import进来了么?
作者: 田富丰    时间: 2013-4-27 13:05
hmr8 发表于 2013-4-27 11:59
包import进来了么?

这是在一个包中呀!!
作者: 袁梦希    时间: 2013-4-27 13:14
楼主想要表达什么  没明白你的意思,因为你这是两个类,也不知道你有几个包。也不知道你说的“把PackageDemo分成一个包”是什么意思
我只能帮你解答,同包内均和派生类中可用。
作者: 吴林飞    时间: 2013-4-27 13:22
问题描述不明确,看半天没看懂楼主想要表述的意思。
作者: 田富丰    时间: 2013-4-27 13:29
袁梦希 发表于 2013-4-27 13:14
楼主想要表达什么  没明白你的意思,因为你这是两个类,也不知道你有几个包。也不知道你说的“把PackageDem ...

两次没描述清楚了!!我说的意思是  本来想把这个分成两个包!!
但是失败!!所以放在一个包中了 !!!可是还是不行!!!

再不明白 !!你就帮我解释下这个代码吧!!谢谢!!1
作者: 袁梦希    时间: 2013-4-27 13:37
本帖最后由 袁梦希 于 2013-4-27 13:41 编辑
田富丰 发表于 2013-4-27 13:29
两次没描述清楚了!!我说的意思是  本来想把这个分成两个包!!
但是失败!!所以放在一个包中了 !!! ...


通过你的代码我发现了问题,你写了两个public访问修饰符,一个类文件,public 修饰类的class只有一个,并且类名必须和你新建的这个类文件名一样,所以一个类文件中可以有多个类,但由public修饰的类只能有一个.你把上面的public去掉试试!
作者: 田富丰    时间: 2013-4-27 13:44
袁梦希 发表于 2013-4-27 13:37
通过你的代码我发现了问题,你写了两个public访问修饰符,一个类文件,public 修饰类的class只有一个,并 ...

我的问题改了!!!麻烦你看下吧!!谢谢 !!!
作者: 吴林飞    时间: 2013-4-27 13:47
本帖最后由 吴林飞 于 2013-4-27 13:59 编辑

  1. <P> package c;
  2. public class PackageDemo3
  3. {
  4. protected static  void show()
  5. {
  6.   System.out.println("hello PackageDemo3");
  7. }
  8. }
  9. package a;
  10. public class PackageDemo extends c.PackageDemo3
  11. {
  12. public static void main(String[] args)
  13. {
  14.   c.PackageDemo3 p1 = new c.PackageDemo3();
  15.   p1.show();
  16. }
  17. }
  18. </P>
复制代码
楼主有两个包分别是a和c,你想在a包中掉用c包中的show()方法,是这个意思吧,把show方法改成静态就行了,注意你的主函数是静态的,并不是protected修饰符的问题。
建议楼主提问的时候不要只给出一部分代码,很容易让人误解。

作者: 田富丰    时间: 2013-4-27 13:48
吴林飞 发表于 2013-4-27 13:47
楼主有两个包分别是a和c,你想在a包中掉用c包中的show()方法,是这个意思吧,把show方法改成静态就行了,注 ...

我不能建立对象  再用名称调用么?
作者: 吴林飞    时间: 2013-4-27 13:55
田富丰 发表于 2013-4-27 13:48
我不能建立对象  再用名称调用么?

我修改过的代码不是用对象调用的么?
作者: 田富丰    时间: 2013-4-27 13:57
吴林飞 发表于 2013-4-27 13:55
我修改过的代码不是用对象调用的么?

咱俩写的一样吧!!
作者: 吴林飞    时间: 2013-4-27 14:00
田富丰 发表于 2013-4-27 13:57
咱俩写的一样吧!!

仔细看看show方法吧,
作者: 田富丰    时间: 2013-4-27 14:01
吴林飞 发表于 2013-4-27 13:55
我修改过的代码不是用对象调用的么?

不好意   没仔细看!!比我多了一个static
package b;
class PackageDemo2 extends c.PackageDemo3
{
        public void show()
        {
                System.out.println("PackageDemo2 run");
                show1();
        }
}
那你看看这个  为什么这个PackageDemo就能调用呢!!
作者: 吴林飞    时间: 2013-4-27 14:19
这个不是一样的道理么,b包中的show方法是非静态的么,你c包中的show方法也是非静态么,当然可以调用了。
作者: 田富丰    时间: 2013-4-27 14:41
吴林飞 发表于 2013-4-27 14:19
这个不是一样的道理么,b包中的show方法是非静态的么,你c包中的show方法也是非静态么,当然可以调用了。 ...

我是想问  为什么a包可以调用b包中的show方法!!
b包不也是没静态么!!?
作者: 董波    时间: 2013-4-28 16:26
田富丰 发表于 2013-4-27 14:41
我是想问  为什么a包可以调用b包中的show方法!!
b包不也是没静态么!!? ...

兄弟,我真服了你了,看到这我才看明白你想问什么。
你是想问main()是一个静态的方法,为什么在它里面可以调用b包中非静态的show()函数呢,对吧?
是这样的:我们所说的静态方法不能调用非静态方法,是指不能“直接”调用。例如,你不能再main()中这样调用:PackageDemo2.show(),这是不允许的;但是,对于c包中的show1(),是可以这样调用的:PackageDemo3.shwo(),这是因为show1()是静态方法。
要想在mian()中调用b包中的show(),必须先创建PackageDemo2的对象,再通过创建的对象进行调用,就像你代码中所示的样子。
作者: 黄玉昆    时间: 2013-4-28 23:12

如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢




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