黑马程序员技术交流社区

标题: 关于接口中和构造方法的问题,求解释 [打印本页]

作者: 郑锐    时间: 2013-6-3 10:38
标题: 关于接口中和构造方法的问题,求解释
本帖最后由 郑锐 于 2013-6-3 20:22 编辑

看过毕老师的视频以后知道接口是特殊的抽象类,而抽象类里面是有构造函数的,我想知道接口里面有构造函数吗,为什么,求高手指点。

作者: 王鑫    时间: 2013-6-3 10:54
接口里应该是没有构造函数的。构造函数有两个作用:1.创建对象 2.初始化,从这两点来看接口都是不需要的。而且java支持多实现,如果接口中有构造函数的话,就造成构造函数实现的不定向了。
作者: 赵乐    时间: 2013-6-3 11:15
接口不允许实例化……所以是不允许有

接口内只能有抽象方法,和静态常量 不能有构造方法。
抽象类中可以有实例方法和抽象方法,必须有构造方法,即使你不主动些构造方法,系统也给自动给你加上无参数空构造
作者: 小冰块    时间: 2013-6-3 11:20
本帖最后由 小冰块 于 2013-6-3 12:17 编辑

首先,关于需不需要:
1、答案肯定是否定的,因为接口是完全的抽象类,不能用于创建对象,也就不需要初始化,所以构造函数完全没必要。
2、就算你写了构造函数,因为你定义的是接口,jvm会自动在前面加上absrtact,同样没办法创建对象。

其次,能不能有:
我做了一个小实验,你在接口中定义一个空的构造函数,结果编译器不报错,但是一旦new了,那肯定是挂了的。
作者: 381946250    时间: 2013-6-3 11:29
构造函数是用来在对象初始化前对对象进行一些预处理的,接口的话全部是由抽象类组成的,没有具体的方法不需要初始化,初始化了也没有什么意义,不能进行任何操作,再者构造方法的调用一般不是用new来实现的么,接口又不能直接new,个人理解是这样的。
作者: 郑锐    时间: 2013-6-3 11:46
小冰块 发表于 2013-6-3 11:20
首先,关于需不需要:
1、答案肯定是否定的,因为接口是完全的抽象类,不能用于创建对象,也就不需要初始化 ...

哦,谢谢
作者: 小冰块    时间: 2013-6-3 12:18
郑锐 发表于 2013-6-3 11:46
哦,谢谢

我也是新手,昨天刚看这段视频,大家一起努力!
作者: 杨青    时间: 2013-6-3 12:43
接口与一般类一样,本身也是有数据成员和方法。
但数据成员必须初始化,且数据成员均为常量;方法必须为抽象方法,没有一般的方法
所以借口不需要初始化,也自然不需要构造函数,因为构造函数用来进行初始化。
作者: First    时间: 2013-6-3 13:01
拿反射去查一下就了解了:
  1.         public static void main(String[] args) throws SecurityException{

  2.                 Class<Runnable> clazz = Runnable.class;
  3.                 Constructor[] cons = clazz.getConstructors();
  4.                                
  5.                 System.out.println(cons.length);
  6.         }
复制代码
输出:
0

所以,接口没有构造函数




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