黑马程序员技术交流社区

标题: 求助 求助 [打印本页]

作者: 莫运飞    时间: 2012-4-7 02:28
标题: 求助 求助
class Ticket implements Runnable
{
        private static int ticket=50;

        public  static void  run()//静态函数能够访问静态函数变量,非静态函数可以访问非静态函数变量,
                                //静态与非静态不能互相访问。那为什么 我这这里的run()方法以及静态上了,且ticket也用上了静态。
                                //为什么在这里还编译出错呢?错误:Ticket中的run()无法实现Runnable中的run()    public static void run()
                                //难道是 Runnable中的run()方法没有实现 静态造成的??????????   不解啊 !!!!!!(这里去掉Static 可以运行)

{
                while(true)

{               
                if(ticket>0)

{
                System.out.println(Thread.currentThread().getName()+"......"+ticket--);
                               


}}}}

class Demo
{
        public static void main(String[] args)


{
                Ticket t=new Ticket();
               
                Thread t1=new Thread(t);
                Thread t2=new Thread(t);
                Thread t3=new Thread(t);


                t1.start();
                t2.start();
                t3.start();
}



}











作者: 吴高其    时间: 2012-4-7 03:16
因为接口中的方法默认被abstract public修饰,接口中的成员变量默认被public static final修饰。
所以,你在实现接口中的方法时是不能用static修饰的。
非静态成员可以反问静态成员。

作者: 吴玉辉    时间: 2012-4-7 07:50
创建线程后,t1.start();表示开启线程,调用Thread对象的run方法。所以你复写run方法如果被static修饰的话,Thread对象无法调用该run方法。此时t1.run()不符合语法规则。
作者: 郑强强    时间: 2012-4-7 07:53
接口中所有的成员变量都隐含的是public static final,因此接口中的成员变量都是静态最终变量,接口中的所有方法都隐含的是public和abstract,不可以用static,final等其他修饰符。在实现某接口的类不是abstract修饰的抽象类,必须则必须在类的定义中实现接口的所有抽象方法,而且方法头部分应该与接口的定义完全一致,即有完全相同的返回值和参数列表,如果实现某接口的类是abstract修饰的抽象类,则可以不用实现接口的全部方法。但是,在这个抽象类的非抽象子类中,都必须有他们父类所实现的接口中所有抽象方法实现的方法体。接口的抽象方法的访问控制符都已被指定public,所以实现这些方法时,必须显式使用public修饰符,否则会缩小所定义方法的访问范围

作者: 莫运飞    时间: 2012-4-7 08:42
学习了 谢谢
作者: 孙国军    时间: 2012-4-7 10:06
  public  static void  run()//静态函数能够访问静态函数变量,非静态函数可以访问非静态函数变量,
                                 //静态与非静态不能互相访问。那为什么 我这这里的run()方法以及静态上了,且ticket也用上了静态。
                                 //为什么在这里还编译出错呢?错误:Ticket中的run()无法实现Runnable中的run()    public static void run()
                                 //难道是 Runnable中的run()方法没有实现 静态造成的??????????   不解啊 !!!!!!(这里去掉Static 可以运行)
{


在继承函数或者接口时,非静态函数不可以被非静态函数所覆盖
作者: 孙国军    时间: 2012-4-7 10:07
写错啦,


在继承函数或者接口时,非静态函数不可以被静态函数所覆盖
作者: pray    时间: 2014-4-26 03:47
让人看后在各论坛纷纷转贴的好帖




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