Java程序员_编程开发学习笔记_网站安全运维教程_渗透技术教程

Java 类的继承与多态实战:Person与Student类的设计

阿贵
9月7日发布 /正在检测是否收录...
温馨提示:
本文最后更新于2025年09月07日,已超过8天没有更新,若内容或图片失效,请留言反馈。

Java 类的继承与多态实战:Person与Student类的设计

129.png

一、原题完整代码呈现

以下是Java中关于类的继承、构造方法调用及方法重写的典型题型,通过Person类和Student类(继承自Person)展示面向对象的基本特性,包含5处需要填写的空白(标记为//*********Found********):

public class Java_2 {

    public static void main(String[] args) {
        Person p = new Person("Zhao",20);
        Student s = new Student("Wang",18,"Cambridge");
        System.out.println(p);
        System.out.println(s);
    }
}

class Person {

    private String name;
    private int age;

    public Person(String name, int age) {
        //*********Found********
        ___________ = name;
        //*********Found********
        ___________ = age;
    }

    public void setName(String n) {
        //*********Found********
        ___________= n;
    }

    public String toString() {
        return "Name: " + name + "     Age: " + age;
    }
}

class Student extends Person {

    private String school;

    public Student(String name, int age, String s) {
        //*********Found********
        ___________;
        school = s;
    }

    public String toString() {
        //*********Found********
        return ___________.toString() + "     School: " + school;
    }
}

二、空白处逐一解析与解答

1. 第一处空白:Person构造方法中给name赋值

答案:this.name

        //*********Found********
        this.name = name;

解析
Person类的构造方法参数name与类的私有成员变量name同名,需用this关键字区分(this.name表示当前对象的成员变量,name表示参数)。此处将参数值赋给成员变量,因此填写this.name

2. 第二处空白:Person构造方法中给age赋值

答案:this.age

        //*********Found********
        this.age = age;

解析
与name同理,参数age与成员变量age同名,需用this.age表示成员变量,将参数值赋给它,因此填写this.age

3. 第三处空白:setName方法中给name赋值

答案:this.name

    public void setName(String n) {
        //*********Found********
        this.name = n;
    }

解析
setName方法用于修改name的值,参数n是新的名字,需将其赋给成员变量name,用this.name明确指向成员变量,因此填写this.name

4. 第四处空白:Student构造方法中调用父类构造方法

答案:super(name, age)

    public Student(String name, int age, String s) {
        //*********Found********
        super(name, age);
        school = s;
    }

解析
Student类继承自Person类,Person类没有无参构造方法(只定义了带name和age的构造方法)。根据Java规则,子类构造方法必须先调用父类的构造方法(否则编译错误),super(name, age)用于调用父类的带参构造方法,初始化继承自父类的name和age,因此填写super(name, age)

5. 第五处空白:Student类toString方法中调用父类toString

答案:super

    public String toString() {
        //*********Found********
        return super.toString() + "     School: " + school;
    }

解析
Student类重写了toString方法,需要复用父类Person的toString方法(获取name和age的字符串),再拼接自己的school信息。super.toString()表示调用父类的toString方法,因此填写super

三、完整正确代码

四、程序功能与运行说明

程序功能

该程序通过两个类展示面向对象的继承特性:

  1. Person类:封装了人的基本属性(name和age),提供构造方法初始化属性、setName方法修改名字、toString方法返回属性字符串;
  2. Student类:继承自Person类,新增school属性,重写构造方法(调用父类构造)和toString方法(复用父类信息并添加学校信息);
  3. 主类Java_2:创建Person和Student对象,打印对象信息(自动调用toString方法)。
运行说明
  1. 对象创建:

    • Person p = new Person("Zhao",20):创建名为"Zhao"、年龄20的Person对象;
    • Student s = new Student("Wang",18,"Cambridge"):创建名为"Wang"、年龄18、就读于"Cambridge"的Student对象。
  2. 打印输出:

    • System.out.println(p):调用Person的toString,输出Name: Zhao Age: 20
    • System.out.println(s):调用Student的toString(先调用父类toString,再拼接学校信息),输出Name: Wang Age: 18 School: Cambridge

五、核心知识点总结

  1. this关键字的用法

    • 作用:区分成员变量与局部变量(当两者同名时);
    • 格式:this.成员变量名表示当前对象的成员变量;
    • 场景:构造方法、setter方法中常用,避免变量名冲突。
  2. 类的继承与super关键字

    • 继承:通过extends关键字实现(如Student extends Person),子类继承父类的非私有属性和方法;
    • super关键字:

      • 调用父类构造方法:super(参数),必须放在子类构造方法的第一行;
      • 调用父类方法:super.方法名(参数),如子类重写父类方法后,需显式调用父类版本。
  3. 构造方法的调用规则

    • 父类无显式构造方法时,子类构造默认调用父类无参构造(隐式);
    • 父类有显式构造方法(尤其是带参构造)时,子类必须在构造方法中通过super显式调用父类的某个构造方法,否则编译错误。
  4. 方法重写(Override)

    • 概念:子类定义与父类同名、同参数列表、同返回值类型的方法,覆盖父类方法;
    • 目的:实现子类特有的功能,同时可复用父类逻辑(通过super.方法名调用);
    • 示例:Student类重写toString,既保留父类的name和age信息,又添加school信息。
  5. toString方法的作用

    • 当打印对象时(如System.out.println(对象)),Java会自动调用该对象的toString方法;
    • 默认实现:Object类的toString返回“类名@哈希码”,通常需要在自定义类中重写,返回有意义的属性信息。

六、常见错误与应试技巧

  1. 常见错误分析

    • 第一、二处空白:遗漏this(导致成员变量未被赋值,参数值赋给自身,逻辑错误);
    • 第三处空白:写成name = n(虽然此处参数名是n,与成员变量name不同名,可正常赋值,但最佳实践仍用this明确区分,增强可读性);
    • 第四处空白:遗漏super(name, age)(父类无无参构造,子类构造必须调用父类带参构造,否则编译错误);
    • 第五处空白:写成PersonPerson是类名,不能直接调用实例方法,需用super指代父类对象)。
  2. 应试技巧

    • this使用:“成员参数同名时,this.成员来区分,赋值操作不混淆”;
    • 继承与super:“子类继承父类,构造先调super,参数匹配要注意,首行调用是规则”;
    • 方法重写:“子类重写父类法,同名同参同返回,super.方法复用父类逻辑,添加子类特有内容”;
    • toString重写:“打印对象调toString,重写返回属性串,信息展示更直观”。

通过本题,我们掌握了thissuper的核心用法、类的继承规则、构造方法调用及方法重写等面向对象的基础知识点。这些是Java面向对象编程的核心,理解并熟练运用这些概念,能帮助我们设计更合理的类结构和继承关系。

喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消 登录评论