站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题关于子类中构造函数的一点疑问???

关于子类中构造函数的一点疑问???

摘要: 关于子类中构造函数的一点疑问???


我在一本介绍java基础的书上看到这样的描述----
1.构造函数不能像其他超类的方法那样被继承。
2.Java不会为子类创建不带参数的缺省构造函数
这个描述很多人说是正确的,但我有点想不明白

请问,既然子类不继承父类的构造函数,而java又不为子类创建
默认的构造函数
而作为一个类,构造函数是必不可少的,根据以上论点
那在子类中我们就必须为其自己写一个类了,哪怕是没有参数和方法体的构造函数.

但事实上并非如此:
class Fruit {
public Fruit(){}

public Fruit ( String color ) {

System.out.print ( "color = " + color ) ;

}

}

class Apple extends Fruit {

public static void main ( String [ ] args ) {

Apple m = new Apple () ;

}

}
以上程序虽然子类apple中没有构造函数(因为如1.2中所述,既不继承也不创建默认的),这个程序能通过编译,是正确的.
为何?请大虾们指教,我觉得有些矛盾



楼主真细心
关注……


我怎么感觉都是错的呢

楼主哪看的?


不为子类创建默认构造函数?


2.Java不会为子类创建不带参数的缺省构造函数
默认有个不带参数的构造函数,但是,如果用户自己定义了其它构造函数(不管带不带参数),就不再有这个缺省构造函数,如下例

1.构造函数不能像其他超类的方法那样被继承。
确实不像继承:子类会默认调用父类的无参构造函数,如果没有,会报错,如:
class Fruit {
//public Fruit(){}********************
public Fruit ( String color ) {
System.out.print ( "color = " + color ) ;
}
}

class Apple extends Fruit {
/*********************
public Apple (){super("Color.Red");}
***********************/
public static void main ( String [ ] args ) {
Apple m = new Apple () ;
}
}


改正:1)自己定义一个无参构造函数
2)显示调用有参构造函数,即加上上例的/*****/部分



Apple m = new Apple () ;
-----------
是class Apple自身的构造函数,而不是从父类class Fruit的继承来的。
“Java不会为子类创建不带参数的缺省构造函数”强调的是父子类之间的关系,是不为子类创建父类的缺省构造函数Fruit()而非自身的Apple () 。
个人理解,有错误大家指教.......



呵呵
没有必要为书圆话的
关键知道是怎么回事

翻译成中文的就是拗口呀(拗得不知道说的什么!)
差不多得了
这东西实践出来的才是真理

尽信书不如无书!


↑返回目录
前一篇: ant中如何copy整个目录到一个路径下
后一篇: 关于java构造函数中的一点疑问?????