黑马程序员技术交流社区
标题:
关于子父类中构造函数,子类实例化过程的疑问
[打印本页]
作者:
曹德君
时间:
2013-4-11 22:36
标题:
关于子父类中构造函数,子类实例化过程的疑问
本帖最后由 曹德君 于 2013-4-11 23:04 编辑
/*摘抄的笔记如下:
子类的所有的构造函数,默认都会访问父类中空参数的构造函数。
因为子类每一个构造函数内的第一行都有一句隐式super();
当父类中没有空参数的构造函数时,子类必须手动通过super语句形式来指定要访问的父类中构造函数。
当然:子类的构造函数第一行也可以手动指定this语句来访问奔雷中的构造函数。
子类中至少会有一个构造函数会访问父类中的构造函数。
*/
疑问:
我不明白,为什么会有没有空参数的构造函数在父类呢。学构造函数的时候不是说,当类生成的时候不就已经存在一个默认的空参数的构造函数了吗?
作者:
殇_心。
时间:
2013-4-11 22:56
如果定义了一个带参数的构造方法后,就一定要定义一个 不带参数的构造方法,否则就不能创建新对象(无参数)
因为当构造一个类的对象时,编译器首先判断类是否有 构造函数,
如果没有,则自动加上一个默认构造函数, 而一旦发现有构造函数后,则不再自动加上构造函数。
作者:
王大斌
时间:
2013-4-11 22:57
这样理解
默认的空参数的构造函数仅仅在你没有定义任何构造函数的时候系统才会默认的去实现一个空的构造方法;
当你类中定义了一个构造函数的时候,无论有没有参数,系统都不提供了。
比如
class perosn
{
}
//上边这个类中就有一个隐含的
public person()
{
}
构造函数
当你类中定义了
class perosn
{
public person(int a)
{
}
}
系统就不给你提供了
作者:
曹德君
时间:
2013-4-11 23:01
哦,明白了还是你们看的仔细啊。
作者:
赵晓东
时间:
2013-4-11 23:13
class Fu
{
private String name;
private int age;
private String address;
Fu(String name,int age) //父类中没有空的构造函数。这时就需要根据子类中的super()传递的值来选择父类的构造函数
{
this.name = name;
this.age = age;
}
Fu(String address)
{
this.address = address;
}
public void print()
{
System.out.println("name : "+name+" age : "+age);
}
public void printAddress()
{
System.out.println("address : "+address);
}
}
class Zi extends Fu
{
Zi()
{
super("zhangsan",20); //相当于函数的重载
//super("beijing");
}
}
class Demo
{
public static void main(String[] args)
{
Zi zi = new Zi();
zi.print();
//zi.printAddress();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2