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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sd110572 金牌黑马   /  2013-12-7 16:07  /  1083 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 sd110572 于 2013-12-7 17:38 编辑

类B实现了接口A,且B有一个不带参数的构造方法,然后声明 A a = new b(),按理说子类实例化要调用父类的不带参数的构造方法,但是接口没有自带的构造方法啊,请教各位大侠,究竟上述语句怎么运行的,谢谢各位不吝赐教!

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

3 个回复

倒序浏览
这是多态的概念  父类应用指向子类对象  它调用的是子类的构造方法!
回复 使用道具 举报
本帖最后由 谢文斌 于 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 吗,无底洞啊亲,所以会报异常的!!!

评分

参与人数 1技术分 +1 收起 理由
贺奕凯 + 1

查看全部评分

回复 使用道具 举报
接口是没有构造方法的   new B()调用的Object的构造方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马