黑马程序员技术交流社区
标题:
关于继承的一道题
[打印本页]
作者:
TS__likewise
时间:
2014-6-9 12:59
标题:
关于继承的一道题
package com.duapp.itfanr;
class Atom {
Atom() {
System.out.println("A");
}
}
class Rock extends Atom {
Rock() {
System.out.println("B");
}
}
class Moutain extends Rock {
Moutain() {
System.out.println("C");
}
}
public class MainTest {
public static void main(String[] args) {
new Moutain();
}
//为什么结果不是C????
作者:
never615
时间:
2014-6-9 13:09
构造函数默认第一句是 super(); 调用的父类的构造函数
作者:
tiuwing
时间:
2014-6-9 13:21
构造函数一般都会默认调用父类的无参构造函数,例子中super()被隐藏了!当父类无无参构造函数时,要手动调用父类的构造函数……
作者:
123_yaya
时间:
2014-6-9 13:29
打印了一下结果是ABC。之前学C++的时候老师讲过子类父类构造函数,析构函数的调用方法。不过貌似java没有析构函数。实例化一个
无参构造函数
时,先看这个类有没有父类,有父类的话,就先调用父类的无参构造方法,再调用子类的。就相当于子类的构造函数前面加了一句“super();" 。本例中new Moutain();先调用Rock父类,而Rock父类的无参构造方法,前面也相当于加了一句“super();",这时候Rock父类再调用它的父类的 Atom 的无参构造方法。所以结果是ABC
另外我试验了一下有参构造函数,发现有参构造函数并不会默认加super(参数)的。下面是在你代码前提下加的的测试代码,注释和没加注释的结果是不一样的。
package com.study.two;
class Atom {
String name="atom";
Atom() {
System.out.println("A");
}
Atom(String name){
System.out.println("Atom::"+name);
}
}
class Rock extends Atom {
Rock() {
System.out.println("B");
}
Rock(String name){
//super(name);
System.out.println("Rock::"+name);
}
}
class Moutain extends Rock {
Moutain() {
super();
System.out.println("C");
}
Moutain(String name){
// super(name);
System.out.println("Moutain::"+name);
}
}
public class MainTest {
public static void main(String[] args) {
new Moutain();
new Moutain("moutain");
}
}
复制代码
作者:
axuan
时间:
2014-6-9 15:30
事实证明:
子类默认调用父类的无参构造方法;
如果在代码中申明默认的无参构造函数,并有函数体,如在构造函数中打印语句,相当于覆写默认的构造函数
package com.itheima;
public class test
{
public static void main(String[] args)
{
new Moutain();
}
}
class Atom
{
Atom()
{
System.out.println("A");
}
}
class Rock extends Atom
{
Rock()
{
System.out.println("B");
}
//当去掉Rock()构造方法市,将不会打印B,子类调用默认的构造方法
//而 System.out.println("B");相当于复写了默认的构造方法
}
class Moutain extends Rock
{
public Moutain()
{
super();//去掉此句,结果一样,证明子类默认调用父类的无参构造方法
System.out.println("C");
}
}
作者:
北极£莜蓝
时间:
2014-6-9 16:38
子类对象在创建的时候会先调用自己的构造函数成员变量进行初始化,而子类的构造函数默认的第一行是super();就跑去调用父类的无参构造函数,所以结果是 ABC
作者:
790324255a
时间:
2014-6-9 18:35
很多人已经给了答案
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2