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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑锐 中级黑马   /  2013-6-3 10:38  /  1631 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 郑锐 于 2013-6-3 20:22 编辑

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

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

8 个回复

倒序浏览
接口里应该是没有构造函数的。构造函数有两个作用:1.创建对象 2.初始化,从这两点来看接口都是不需要的。而且java支持多实现,如果接口中有构造函数的话,就造成构造函数实现的不定向了。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
接口不允许实例化……所以是不允许有

接口内只能有抽象方法,和静态常量 不能有构造方法。
抽象类中可以有实例方法和抽象方法,必须有构造方法,即使你不主动些构造方法,系统也给自动给你加上无参数空构造

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
本帖最后由 小冰块 于 2013-6-3 12:17 编辑

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

其次,能不能有:
我做了一个小实验,你在接口中定义一个空的构造函数,结果编译器不报错,但是一旦new了,那肯定是挂了的。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报 1 0
构造函数是用来在对象初始化前对对象进行一些预处理的,接口的话全部是由抽象类组成的,没有具体的方法不需要初始化,初始化了也没有什么意义,不能进行任何操作,再者构造方法的调用一般不是用new来实现的么,接口又不能直接new,个人理解是这样的。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
小冰块 发表于 2013-6-3 11:20
首先,关于需不需要:
1、答案肯定是否定的,因为接口是完全的抽象类,不能用于创建对象,也就不需要初始化 ...

哦,谢谢
回复 使用道具 举报

我也是新手,昨天刚看这段视频,大家一起努力!
回复 使用道具 举报
接口与一般类一样,本身也是有数据成员和方法。
但数据成员必须初始化,且数据成员均为常量;方法必须为抽象方法,没有一般的方法
所以借口不需要初始化,也自然不需要构造函数,因为构造函数用来进行初始化。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
拿反射去查一下就了解了:
  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

所以,接口没有构造函数

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马