| 1  子类和父类  类名前的public 修饰要去掉,因为文件名称要和被public修饰的类名相同,你有三个类名,不知道该命名哪个复制代码public class Student extends Person 
{
        int id;
        public Student(String name, int age, int id) 
        {
                //这里隐含着一个  super();
                super.name = name;
                super.age = age;
                this.id = id;
        }
        public void sayHello()
        {
                System.out.println("hello,I'm "+name);
        }
}
2   子类构造函数第一行隐含着 super(); 调用父类构造函数,因为父类构造函数只有一个调用 sayHello方法  而且此方法被子类复写了。所以会调用子类的sayHello方法,此时没有
 赋值给name 自动初始化为null  这就是第一个行结果的原因
 3  执行完父类构造函数后  继续执行下面的  用 name给 父类name赋值了 ,在主函数中 s.sayHello();运行  输出第二行结果。
 4  此文件我给完整的修改好后应该如下。
 复制代码//定义一个父类:Person
 class Person //去掉public
{
        String name;
        int age;
        public Person(String name,int age)//添加参数
        {
              this.name=name;//给name和age赋值
                          this.age=age;
                                this.sayHello();
        }
        
        public void sayHello()
        {
                System.out.println("hello~");
        }
}
//++++++++++++++++++++++++++++++++++
//定义一个子类:Student
 class Student extends Person //去掉public
{
        int id;
        public Student(String name, int age, int id) 
        {
                super(name,age);
                                //super.name = name;//去父类中赋值了 这里注释掉
                //super.age = age;
                this.id = id;
        }
        public void sayHello()
        {
                System.out.println("hello,I'm "+name);
        }
}
//++++++++++++++++++++++++++++++++++
//测试类:StudentDemo
public class StudentDemo 
{
        public static void main(String[] args) 
        {
                Student s = new Student("zhangsan",20,1301);
                s.sayHello();
        }        
}
//+++++++++++++++++++++++++++++++++++++++
 |