A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马高明辉 中级黑马   /  2012-7-11 21:44  /  5352 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

不能有,但是具体原因是什么?

9 个回复

倒序浏览
接口中的方法是不能实现的,但静态方法又是必须实现的,这个理由对么?
回复 使用道具 举报
我猜想,这是在编译阶段就会报错的。

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

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


接口中的方法,都是在等待实现呢。
回复 使用道具 举报
因为java 中不能定义抽象静态方法static
interface中所有的成员方法都是abstract的,当然也就不能定义静态方法static。
如果可以定义抽象静态方法static,设 static abstract method(); 是抽象类A的方法
那么因为是静态方法那可以用A.method();
而这个方法又是抽象的没有方法体,调用了怎么执行呢?

评分

参与人数 1技术分 +1 收起 理由
黑马张扬 + 1

查看全部评分

回复 使用道具 举报
当然,这是规定,没有什么原因吧,
只要你写了static编译就通不过

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

接口中的方法是定义的规范,没有必要在其中加一些实际的操作
回复 使用道具 举报
当然,这是规定,没有什么原因吧,
只要你写了static编译就通不过

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

接口中的方法是定义的规范,没有必要在其中加一些实际的操作
回复 使用道具 举报
看来是对的,静态方法必须实现。所以,抽象和静态就矛盾了。

点评

你这句话说的有点问题吧  发表于 2012-7-12 00:48
回复 使用道具 举报
Abstract和static不能放在一起,否则便会出现错误。(这是因为static不可被覆盖,而abstract为了生效必须被覆盖。)

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

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

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

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 通俗

查看全部评分

回复 使用道具 举报

在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.(接口中静态的属性或者方法均与具体的实例无关)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马