interface i{
   void a();
}
public class Ii implements i{
public void a(){
System.out.println("i");
}
public static void main(String[] args){
new Ii().a();
}
}
唉,多看看书吧

解决方案 »

  1.   

    楼上的都没有理解我的意思,那有那么简单的问题呢!:<!
    我是想在class Ii中实现interface i,并使i中的a()成为Ii中的class variable!明白了吧!回答问题前,看清楚点!:>
      

  2.   

    你的接口定义没有错,
    但你的主类有两个错,
    第一个,主类必须具有public访问控制性
    第二个,在主类你没有正确实现接口的方法void a();
    所以,按照你的想法正确的写法如下:
    interface i{
        void a();
    }
    public class Ii implements i{
    public   void a(){
    System.out.println("i");
    }
    static void b(){  new Ii().a();  } public static void main(String[] args){        b();
    }
    }去试一下吧,呵呵!
      

  3.   

    E:\jbuilder\jdk1.4\bin>javac Ii.javaE:\jbuilder\jdk1.4\bin>java Ii
    Exception in thread "main" java.lang.NoClassDefFoundError: IiE:\jbuilder\jdk1.4\bin>不行呀!
      

  4.   

    interface i{
       void a();
    }
    class Ii implements i{
     public void a(){
    System.out.println("i");
    }
    public static void b(){
    //this.a();
    Ii x = new Ii();
    x.a();
    }
     
    public static void main(String[] args){
    b();
    }
    }
      

  5.   

    wtjd(涛涛) 我想使interface i中的a()在class Ii中成为static的,我试了好象不行!看下面两个例子!
    程序一:
    interface i{
     void a();
    }
    public class testStatic implements i{
       public static void a(){//注意此处a()为static!
    System.out.println("i");
    }
    public static void main(String[] args){
    testStatic.a();
    }
    C:\testStatic.java:2: a() in testStatic cannot implement a() in i; a() and a() are static
       public static void a(){
                          ^
    1 error
    程序二:
    class testMain{
       public static void a(){
        System.out.println("a");
       }
       public static void main(String[] args){
        testMain.a();
       }
    }
    这个却能编译通过!
    我想不通为什么实现接口时,不能使函数成为static method!!
      

  6.   

    我理解为:本身interface定义的函数是一组公共的函数,如果在实现的类里面如果变为类属性的话,那么down-casting的意义又何在?这样违背了interface的思想。楼上几位的做法比较正确。
      

  7.   

    nighthawk(梦游中……)说的似乎还不能令人信服!
      

  8.   

    在Java里面,Interface定义的方法都等同于public的
    你的实现类必须在方法上写public void a();不可以static修饰,这个是Java中的语法
      

  9.   

    如果是java的规定就好了,但我在学习tij的过程中,没有见过这样的规定!我见过好几个规定!
    比如:tij中P249中写到,"当你实现(implement)某个interface时,必须将承袭自该interface的所有函数都定义为public,否则他们的缺省属性会是'friendly',而你也就因此在继承过程中降低了访问权限----这在java中是不允许的!"//却没有如此明显的规定不能将函数定义为static啊!
      

  10.   

    接口里的声名的方法必须是public的,而且是非static的,因为接口里的方法是公用的
    而且static方法是不能被继承的,它是和具体的类绑定在一起的,那么你既然在子类中
    要去实现接口的方法,必然需要的是同名,同返回类型,而且必须是public的方法
    所以不能将方法定义为static
      

  11.   

    先不说语法问题。我们通常为什么会继承一个接口呢?我们肯定不是为了改变他,而是为了得到一个通用的接口。凡是继承了这个接口的类都有某些相同的行为。如果想把方法做成static,不妨在接口中定义。
      

  12.   

    我现在对这个implement和extends有点迷糊了!好象诸多extends的性质都可以用到implement上,比如楼上说的"必然需要的是同名,同返回类型,"  大家说说看把是否是我说的这样呢?
      

  13.   

    不一样的!
    implements可以说是JAVA的多重继承,但接口也有它的特殊性,它的属性都是pulic static final,它的方法都是pulbic abstract  ,  而且没有方法体。而extends 类却没有此特殊要求,它与C++里面的继承一样的概念。
    很好理解吧,祝你早日解决你的难题!
      

  14.   

    第一、Interface中的方法都是public abstract的,需要实现类来实现
    第二、带static修饰符的是属于类的函数,而不是属于实例的,也就是说如果父类和子类都实现了a()方法,调用时只考虑当前实例的修饰类型而不考虑实例实际的类型。也就是说如果将子类赋值给父类,然后调用父类的a()方法,将不会调用子类的a方法,这一点和继承不同。这就是Static的特殊之处-----不可重载。
      

  15.   

    一楼的对,要用new分配新的空间
      

  16.   

    xjffj(小刀) 小刀,你说的我看不懂啊,能否解释的更清楚点!
      

  17.   

    这就说明了一个问题呀,
    说明继承了接口的类必须为类书写接口方法,而不能让它成为static,书上是没有这样的规定,但我们想想之所以有接口,是因为接口为很多继承它的类提供了规范,所以你就这样去想吧,编程嘛,经验第一,理论第二!
    祝你成功!
      

  18.   

    不能static的原因,Think off these:class A {
      public void a() {
        System.out.println("A.a()");
      }  public static void b() {
        System.out.println("A.b()");
      }
    }class B extends A{
      public void a() {
        System.out.println("B.a()");
      }  public static void b() {
        System.out.println("B.b()");
      }
    }A a = new A();
    B b = new B();
    A c = new B();
    a.a();a.b();b.a();b.b();c.a();c.b();其中c.b() ==> A.b(); 可见,static的方法没有多态,且和对象的声明类型(而非实际类型)相关。类似A c = new B();c.b(); ==> A.b();假设 interface IA { static void a(); }
    class CA implements IA {public static void a();}
    IA a = new CA();
    a.a();
    的时候,将会去执行IA.a();那显然是错误的
      

  19.   

    只要记住一点,非static的方法跟对象实例的具体类跑,而static方法则跟当前你所使用的类跑。
      

  20.   

    在实现接口中定义的函数时,要默认的加上public关键字,否则会缩小该函数的访问限定,编译器是不允许出现这种情况的!