java接口中为什么不能有  实例字段  和  静态方法 ?

解决方案 »

  1.   

    接口里不能有 static 这个关键词的
      

  2.   

    接口的所有方法都是抽象的,而抽象方法是没有static,有static的方法是不能override的,所以这样定义接口才有意义。
    接口中的变量也都是Final、static。
      

  3.   

    在Thinking in Java中有这样的描述:
    The interface keyword produces a completely abstract class, one that provides no implementation at all. It allows the creator to determine method names, argument lists, and return types, but no method bodies. An interface provides only a form, but no implementation.(接口是完全抽象的一个类,不提供任何实现)接口中的字段默认就是并且必须是public static final的,不是你所说的实例字段. 字段只能是属于类变量,不可以是实例变量.同样在Thinking in Java中有:
    When you say something is static, it means that particular field or method is not tied to any particular object instance of that class.(接口中静态的属性或者方法均与具体的实例无关)
    如果你在接口中将方法声明为静态的(与具体的实例无关),但接口中的方法又要求必须被实现类去实现(可能会有多个实现类),这岂不是自相矛盾!
      

  4.   

    这个....他就是这么规定的   到底为什么 也许是为了遵循java这个语言设计之初定下的原则吧
      

  5.   

    接口就是个methods form,是个抽象的东西,麻烦好好理解下抽象数据类型。什么是一般,什么是特殊。
      

  6.   


    接口中的字段默认就是并且必须是public static final的????
    搞错了吧,接口中都是是public  abstract    ,如果没指定,默认会加上,并没有final,如果定义final那谁来实现那个方法,定义接口的目的就是让子类实现了
    可以是你笔误
      

  7.   

    把你说的字段看成方法了,哈哈!
    字段是public static final
    方法是 public  abstract
      

  8.   

    C++ 什么时候有了接口了。C++ 只有ABC
      

  9.   

    规范是第一位的。另一个可以这样去理解,接口的出现是为了给JAVA提供多重继承的。这种复杂的多重继承当然是被继承的越简单越好了。最简单的就是他不提供任何存储,即他完全没有任何数据,仅仅是一个条文罢了。
      

  10.   

    实例字段是可以用的。static指class所拥有的方法,是在class第一次实例化的时候产生,interface不能实例化,当然不能有
      

  11.   

    接口的方法要通过implements或extends来实现
    从interface的定义上说,接口不允许用户在接口中写方法
    static是立刻把接口放进内存,这样做很麻烦使接口失去了活性;如果再把接口实例化那(和普通类差不
    多了)接口也没了存在的意义。
      

  12.   

        要声明一个现实某个接口的类,应该在类声明中包裹implements子句。类可以实现多个接口(java平台支持接口多重继承),所以ipmlements关键字后面跟着一个口号分割的类实现的接口列表。
       
        接口中的字段默认就是并且必须是public static final的,不是你所说的实例字段. 字段只能是属于类变量,不可以是实例变量.
      

  13.   

    static关键字是不可以修改抽象方法的。
    接口里面只有常量和抽象方法,它只是定义了一种规范。很多程序是面向接口编程的~当然了,还有其他的编程思想了。
      

  14.   

    No,这一点是你认识错了他说的是字段,而不是方法。在接口中定义的属性的确是 public static final 的,不信可以用以下代码验证一下:interface MyInterface {
        public String MyText = "ABCDEFG";
    }如果在测试程序中用下面的语句,则会输出:ABCDEFG
    System.out.println(MyInterface.MyText);
    在这段程序中,没有创建关于 MyInterface 相关的任何对象,因此它是 static 的而如果在程序中试图修改 MyInterface.MyText 的值:
    MyInterface.MyText = "1234567";
    则会报编译错误:
    无法为最终变量 MyText 指定值
      Interface.MyText = "1234567";
    因此 Interface.MyText 是最终(final)的
      

  15.   

    楼上好几位仁兄说,这是 java 的规定,他怎么规定就怎么执行好了。其实我不赞同这种说法,这对深入理解 java 是不利的。我们应该知道,java 的语法规则其实是人制订的,当初java的开发者之所以要制订这些形形色色的规则,并不是他们吃饱了饭没事干,或者是心里不爽就是喜欢制订些规定来约束java程序员。规则提出其实都是有客观原因的,理解了这些规则可以帮助我们深入地理解 java,还包括其它面向对象语言,如C#、C++
      

  16.   

    静态方法是不能被子类重写(也叫覆盖)的(为什么不能重写,则是另外一个问题了)接口中是不能有被实现的方法的,否则它就不是接口而是抽象类一个类要实现接口中的方法,其实就是对接口方法的重写。而要实现静态方法,就必须重写接口中的静态方法,这和第一点产生冲突。
    如果觉得难以理解的话,请看下面的例子
    假设在 java 中可以定义静态方法:
    public interface MyInterface {
        public static void f();
    }有两个子类实现了这个接口:
    public class A implements MyInterface {
        public static void f(){
            System.out.println("AAAA");
        }
    }public class B implements MyInterface {
        public static void f(){
            System.out.println("BBBB");
        }
    }现在有段程序需要调用 MyInterface 中定义的静态方法 f(),由于 f 是静态的,因此我们可以用
    MyInterface.f();
    来调用这个方法。但是,在 MyInterface 中并没有实现 f() 方法,因此必须是调用子类的实现。
    那么这里就存在一个问题,到底是调用 A.f() 还是调用 B.f()呢,我们不知道,当然虚拟机也不可能会知道。
      

  17.   


    大佬,C++还不是完全面向对象呢。。
    怎么把C++与Java混为一谈呀
      

  18.   

    这个答案我也在想,我们只知道规定接口是这样的,但同时thinking in java中也讲到,嵌套类是可以放到接口中去的,自然这个嵌套类是默认为public static的。而目的则是为了使这部分代码被这个接口的所有不同实现所公用。
    static用来定义一个方法的一大用处就是,这部分内容不依赖于类的实例化,其内部也不会存在指向该类某对象的this指针。而嵌套类放到接口中后,过程是一样的,并不违反接口的定义。
    当然,不可否认,这和在类中的静态方法作用是不太相同的。
    下面这段代码可以看出来对接口中嵌套中的静态方法的调用:package com.test;interface ClassInterface {
        class InnerClass {
            public static void M() {
                System.out.println("M");
            }
        }
    }public class test {
        
        public static void main(String[] args) throws Exception {
            ClassInterface.InnerClass.M();
        }
    }输出是M
      

  19.   

    csdn回复  论坛 是不是 针对一个帖子 可以回复多少条都可以  不断加分  还是 针对一个帖子只需回复一条
      

  20.   

    先从接口的定义来看:

    接口里的方法不允许有方法体
    再来看看静态方法,虽然没人具体说过静态方法是什么样的,但是谁见过没有方法体的静态方法呢? 所以static的方法100%是有方法体的,这与接口的定义完全不符所以,接口和静态方法是一对冤家,abstract和static关键字也是一对冤家,他们永远不可能在一起。