类B实现了接口A,且B有一个不带参数的构造方法,然后声明 A a = new b(),按理说子类实例化要调用父类的不带参数的构造方法,但是接口没有自带的构造方法啊,请教各位大侠,究竟上述语句怎么运行的,谢谢各位不吝赐教!作者: Faner 时间: 2013-12-7 16:35
这是多态的概念 父类应用指向子类对象 它调用的是子类的构造方法!作者: 谢文斌 时间: 2013-12-7 16:55 本帖最后由 谢文斌 于 2013-12-7 17:16 编辑
package com.heibai.study;
interface A
{
public abstract void a();
}
class B implements A
{
B()
{
System.out.println("B() run");
a();
}
B(int x)
{
A a = new B();
System.out.println("B("+x+") run");
a.a();
}
public void a()
{
System.out.println("B().a() run");
}
}
class Temp
{
public static void main(String[] args)
{
new B(1);
}
}
复制代码
输出结果:
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的构造方法