A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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();        
                }
}

6 个回复

倒序浏览
第一你的类名格式不正确 啊亲
回复 使用道具 举报
因为你new的是Student.那么先加载的一定是父类。所以一开始你的age和name只是初始化。  如果你在Student的最后写上super.display();这才是你想要得结果。
回复 使用道具 举报
当子类继承一个父类时,构造子类时需要调用父类的构造函数,存在三种情况
        (1),父类无构造函数或者一个无参数构造函数,子类若无构造函数或者有无参数构造函数,子类构造函数中不需要显式调用父类的构造函数,系统会自动在调用子类构造函数前调用父类的构造函数。
         (2),父类只有有参数构造函数,子类在构造方法中必须要显示调用父类的构造函数,否则编译出错。
         (3),父类既有无参数构造函数,也有有参构造函数,子类可以不在构造方法中调用父类的构造函数,这时使用的是父类的无参数构造函数。
你这里的例子属于第三种情况,所以调用display方法的时候name和age的值自然是null和0。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
打个断点跟一下,你会对这个很明了

评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3

查看全部评分

回复 使用道具 举报
yukuoyuan 发表于 2015-1-31 18:00
第一你的类名格式不正确 啊亲

格式有问题,哪里呢?
回复 使用道具 举报
fightingwang 发表于 2015-2-1 10:29
格式有问题,哪里呢?

看错了不好意思哈,,不过你那个子类里边得整个构造函数才能给父类赋值
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马