黑马程序员技术交流社区

标题: 接口中能有静态方法么? [打印本页]

作者: 黑马高明辉    时间: 2012-7-11 21:44
标题: 接口中能有静态方法么?
不能有,但是具体原因是什么?
作者: 黑马高明辉    时间: 2012-7-11 21:45
接口中的方法是不能实现的,但静态方法又是必须实现的,这个理由对么?
作者: 陈淑飞    时间: 2012-7-11 21:56
我猜想,这是在编译阶段就会报错的。

因为,javac等编译器,在处理接口时,会在所以方法中,自动另上 public abstract xType methodXX();

遇到了  static 方法,肯定会报错,哪有抽象的静态方法啊。


接口中的方法,都是在等待实现呢。
作者: 孙新强    时间: 2012-7-11 22:07
因为java 中不能定义抽象静态方法static
interface中所有的成员方法都是abstract的,当然也就不能定义静态方法static。
如果可以定义抽象静态方法static,设 static abstract method(); 是抽象类A的方法
那么因为是静态方法那可以用A.method();
而这个方法又是抽象的没有方法体,调用了怎么执行呢?

作者: 张天天    时间: 2012-7-11 22:09
当然,这是规定,没有什么原因吧,
只要你写了static编译就通不过

不过java这样的规定也是有道理的:
你如果写成了static的,这个方法该如何调用?用接口.方法?
别忘了接口中的方法是抽象的,没有实际内容的。

接口中的方法是定义的规范,没有必要在其中加一些实际的操作
作者: 张天天    时间: 2012-7-11 22:10
当然,这是规定,没有什么原因吧,
只要你写了static编译就通不过

不过java这样的规定也是有道理的:
你如果写成了static的,这个方法该如何调用?用接口.方法?
别忘了接口中的方法是抽象的,没有实际内容的。

接口中的方法是定义的规范,没有必要在其中加一些实际的操作
作者: 黑马高明辉    时间: 2012-7-11 22:23
看来是对的,静态方法必须实现。所以,抽象和静态就矛盾了。
作者: 夏儒日    时间: 2012-7-12 08:34
Abstract和static不能放在一起,否则便会出现错误。(这是因为static不可被覆盖,而abstract为了生效必须被覆盖。)

interface是特殊的抽象类;所有的成员方法都是abstract的,当然也就不能定义静态方法static,因为静态方法可以不依赖于对象能够执行;如果可以定义抽象静态方法static,设 static

abstract method(); 是抽象类A的方法,那么因为是静态方法那可以用A.method();
而这个方法又是抽象的没有方法体,调用了怎么执行呢?
作者: dev    时间: 2012-7-12 08:46
接口中是不能定义静态方法的。
原因是:接口中的方法都是抽象的,只是定义返回值类型和方法名,
并没有具体的实现方式,而静态方法是不用对象调用,直接可以通过
类名调用的
,而且静态方法在类加载前先加载,那么在没有加载类之

前就可以调用静态方法,而接口中的静态方法并没有实现体,这样调
用并没有太大意义,所以java是不允许在接口中定义静态方法的。

作者: 耿立刚    时间: 2012-7-12 15:20

在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.(接口中静态的属性或者方法均与具体的实例无关)




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