- 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);
- }
- }
复制代码 1 子类和父类 类名前的public 修饰要去掉,因为文件名称要和被public修饰的类名相同,你有三个类名,不知道该命名哪个
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();
- }
- }
- //+++++++++++++++++++++++++++++++++++++++
复制代码 |