黑马程序员技术交流社区

标题: 接口的构造函数 [打印本页]

作者: sd110572    时间: 2013-12-7 16:07
标题: 接口的构造函数
本帖最后由 sd110572 于 2013-12-7 17:38 编辑

类B实现了接口A,且B有一个不带参数的构造方法,然后声明 A a = new b(),按理说子类实例化要调用父类的不带参数的构造方法,但是接口没有自带的构造方法啊,请教各位大侠,究竟上述语句怎么运行的,谢谢各位不吝赐教!
作者: Faner    时间: 2013-12-7 16:35
这是多态的概念  父类应用指向子类对象  它调用的是子类的构造方法!
作者: 谢文斌    时间: 2013-12-7 16:55
本帖最后由 谢文斌 于 2013-12-7 17:16 编辑
  1. package com.heibai.study;

  2. interface A
  3. {
  4.         public abstract void a();
  5. }
  6. class B implements A
  7. {       
  8.         B()
  9.         {
  10.                 System.out.println("B() run");
  11.                 a();
  12.         }
  13.         B(int x)
  14.         {
  15.                 A a = new B();
  16.                 System.out.println("B("+x+") run");
  17.                 a.a();
  18.         }
  19.         public void a()
  20.         {
  21.                 System.out.println("B().a() run");
  22.         }

  23. }
  24. class Temp
  25. {
  26.         public static void main(String[] args)
  27.         {
  28.                 new B(1);
  29.         }
  30. }
复制代码

输出结果:
B() run
B().a() run
B(1) run
B().a() run


        接口是不能实例化的,所以它没有构造方法。你用A a = new B(),new 的是class B的对象,还有,构造函数里面不能new 自己的对象,只能new 别的参数的对象。你想想,B(){ new B()},那不就是一直new 吗,无底洞啊亲,所以会报异常的!!!

作者: 四五六七八    时间: 2013-12-7 16:57
接口是没有构造方法的   new B()调用的Object的构造方法




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