返回

体验对象的魅力,探索继承的神奇世界

前端




在软件开发的世界中,我们经常会听到“对象”和“继承”这两个术语。它们是面向对象编程(OOP)的基础概念,可以帮助我们构建灵活、可扩展和易于维护的代码。

一、对象的概念

   对象可以被视为现实世界中事物的抽象表示。它包含了一组数据(称为属性)和一组操作(称为方法),用于对这些数据进行操作。例如,我们可以创建一个表示学生对象的类,其中包含属性(如姓名、学号、专业)和方法(如计算总成绩、显示学生信息)。

二、创建对象的几种方式

   在面向对象编程中,创建对象有几种常见的方法:

  1. 方式一:通过类创建对象
       这是最常见的方式。首先定义一个类,其中包含对象的属性和方法,然后使用该类创建对象。例如:
    ``` class Student { private String name; private int rollNumber; private String major;
    public Student(String name, int rollNumber, String major) {
        this.name = name;
        this.rollNumber = rollNumber;
        this.major = major;
    }
    
    public String getName() {
        return name;
    }
    
    public int getRollNumber() {
        return rollNumber;
    }
    
    public String getMajor() {
        return major;
    }
    
    public void calculateTotalMarks() {
        // 计算学生总成绩的逻辑
    }
    
    public void displayStudentInfo() {
        // 显示学生信息的逻辑
    }
    

    }

    Student student1 = new Student("John Doe", 12345, "Computer Science");
    Student student2 = new Student("Jane Smith", 23456, "Business Administration");

    <br/>
    &emsp;&emsp; 通过这种方式创建的对象具有强类型,这意味着它们只能访问和操作与它们的类相关的数据和方法。
    </li>
    
    <li><strong>方式二:对象字面量</strong><br/>
    &emsp;&emsp; 对象字面量是一种使用字面量语法创建对象的方式。它允许您直接在代码中定义对象,而无需创建类。例如:
    <br/>
    

    const student1 = {
    name: "John Doe",
    rollNumber: 12345,
    major: "Computer Science",
    calculateTotalMarks: function() {
    // 计算学生总成绩的逻辑
    },
    displayStudentInfo: function() {
    // 显示学生信息的逻辑
    }
    };

    const student2 = {
    name: "Jane Smith",
    rollNumber: 23456,
    major: "Business Administration",
    calculateTotalMarks: function() {
    // 计算学生总成绩的逻辑
    },
    displayStudentInfo: function() {
    // 显示学生信息的逻辑
    }
    };

    <br/>
    &emsp;&emsp; 使用对象字面量创建的对象具有弱类型,这意味着它们可以访问和操作任何数据和方法,无论它们是否与它们的类型相关。
    </li>
    
    <li><strong>方式三:工厂模式</strong><br/>
    &emsp;&emsp; 工厂模式是一种创建对象的模式,它允许您在不指定对象的具体类的情况下创建对象。这使得您可以轻松地更改创建对象的逻辑,而无需修改客户端代码。例如:
    <br/>
    

    class StudentFactory {
    static createStudent(name, rollNumber, major) {
    switch (major) {
    case "Computer Science":
    return new ComputerScienceStudent(name, rollNumber);
    case "Business Administration":
    return new BusinessAdministrationStudent(name, rollNumber);
    default:
    throw new Error("Invalid major");
    }
    }
    }

    class ComputerScienceStudent {
    constructor(name, rollNumber) {
    this.name = name;
    this.rollNumber = rollNumber;
    this.major = "Computer Science";
    }

    calculateTotalMarks() {
        // 计算计算机科学系学生总成绩的逻辑
    }
    
    displayStudentInfo() {
        // 显示计算机科学系学生信息的逻辑
    }
    

    }

    class BusinessAdministrationStudent {
    constructor(name, rollNumber) {
    this.name = name;
    this.rollNumber = rollNumber;
    this.major = "Business Administration";
    }

    calculateTotalMarks() {
        // 计算工商管理系学生总成绩的逻辑
    }
    
    displayStudentInfo() {
        // 显示工商管理系学生信息的逻辑
    }
    

    }

    const student1 = StudentFactory.createStudent("John Doe", 12345, "Computer Science");
    const student2 = StudentFactory.createStudent("Jane Smith", 23456, "Business Administration");

    <br/>
    &emsp;&emsp; 使用工厂模式创建的对象具有良好的封装性,因为它可以将创建对象的逻辑与客户端代码分离。
    </li>
    
    <li><strong>方式四:通过工厂函数动态创建对象并返回</strong><br/>
    &emsp;&emsp; 返回一个对象的函数,就是工厂函数。适用场景: 需要创建多个对象。问题: 对象没有良好管理,代码可能混乱。
    <br/>
    

    function createStudent(name, rollNumber, major) {
    return {
    name,
    rollNumber,
    major,
    calculateTotalMarks() {
    // 计算学生总成绩的逻辑
    },
    displayStudentInfo() {
    // 显示学生信息的逻辑
    }
    };
    }

    const student1 = createStudent("John Doe", 12345, "Computer Science");
    const student2 = createStudent("Jane Smith", 23456, "Business Administration");

    </li>
    
    </ol>
    
    <h2>三、继承的概念</h2>
    <p align="justify">
    &emsp;&emsp; 继承是面向对象编程中的一项重要特性,它允许一个类从另一个类继承属性和方法。这使得我们可以创建新的类,这些类具有父类的所有特性,并且可以添加自己的新特性。例如,我们可以创建一个表示研究生的类,它从学生类继承了所有属性和方法,并且添加了新的属性(如导师)和方法(如撰写论文)。
    </p>
    
    <p align="justify">
    &emsp;&emsp; 继承的好处有很多,包括:
    </p>
    
    <ul>
    <li><strong>代码重用:</strong>通过继承,我们可以重用父类中的代码,而无需在子类中重新编写。这可以节省时间和精力,并减少错误的可能性。</li>
    <li><strong>代码维护:</strong>当我们需要修改父类中的代码时,所有继承了该父类的子类也会自动更新。这使得代码维护变得更加容易。</li>
    <li><strong>可扩展性:</strong>继承允许我们轻松地创建新的类,这些类具有父类的所有特性,并且可以添加自己的新特性。这使得代码更具可扩展性,可以轻松地适应新的需求。</li>
    </ul>
    
    <h2>四、结语</h2>
    <p align="justify">
    &emsp;&emsp; 对象和继承是面向对象编程的基础概念,它们可以帮助我们构建灵活、可扩展和易于维护的代码。通过理解这些概念,我们可以编写更优雅、更高效的代码,并创建更复杂的应用程序。
    </p>