黑马程序员技术交流社区

标题: Java继承问题,为啥display输出的不是98和Irving而是Null和0 [打印本页]

作者: fightingwang    时间: 2015-1-31 16:34
标题: Java继承问题,为啥display输出的不是98和Irving而是Null和0
class Human
{
                private int age;
                private String name;
        
                public Human(){}
        
                public Human(String name, int age)
                {   
                            this.name = name;
                            this.age = age;
                }
        
                public void display()
                {
                            System.out.println(name + "----" + age);
                }        
}

class Student extends Human
{        
                int age = 98;
                String name = "Irving";
}

public class ExtendsTest2
{
                public static void main(String[] args)
                {
                            Student s = new Student();
                            s.display();        
                }
}

作者: yukuoyuan    时间: 2015-1-31 18:00
第一你的类名格式不正确 啊亲
作者: jiangwenjun    时间: 2015-1-31 18:26
因为你new的是Student.那么先加载的一定是父类。所以一开始你的age和name只是初始化。  如果你在Student的最后写上super.display();这才是你想要得结果。
作者: zhengyijun    时间: 2015-1-31 18:43
当子类继承一个父类时,构造子类时需要调用父类的构造函数,存在三种情况
        (1),父类无构造函数或者一个无参数构造函数,子类若无构造函数或者有无参数构造函数,子类构造函数中不需要显式调用父类的构造函数,系统会自动在调用子类构造函数前调用父类的构造函数。
         (2),父类只有有参数构造函数,子类在构造方法中必须要显示调用父类的构造函数,否则编译出错。
         (3),父类既有无参数构造函数,也有有参构造函数,子类可以不在构造方法中调用父类的构造函数,这时使用的是父类的无参数构造函数。
你这里的例子属于第三种情况,所以调用display方法的时候name和age的值自然是null和0。
作者: 丨丶米饭    时间: 2015-1-31 18:45
打个断点跟一下,你会对这个很明了
作者: fightingwang    时间: 2015-2-1 10:29
yukuoyuan 发表于 2015-1-31 18:00
第一你的类名格式不正确 啊亲

格式有问题,哪里呢?
作者: yukuoyuan    时间: 2015-2-1 16:27
fightingwang 发表于 2015-2-1 10:29
格式有问题,哪里呢?

看错了不好意思哈,,不过你那个子类里边得整个构造函数才能给父类赋值




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2