zoukankan      html  css  js  c++  java
  • 实验六201771010101 白玛次仁

    第五章 继承 总结

    实验六 继承定义与使用实验时间 2018-9-28

    1.类,超类与子类

    继承Employee类来定义Manager类格式,关键字extends表示继承。

    Class新类名(子类(subclass,派生类(derived class)或孩子类(chide class)

    extends已有类名(超类(superclass,基类(base class)或父类(parent class))。

    一般来说,子类比超类拥有的功能更加丰富。

    子类不能直接访问超类的私有域,必须和其他方法一样——使用公有接口。

    super是一个指示编译器调用超类方法的特有关键字,它不是一个对象的引用,不能将super赋给另一个对象变量

    从一个超类扩展而来的类集合称为继承层次。在继承层次中,某个类到其祖先的路径被称为该类的继承链。

    Java不支持多继承。

    2.多态性:泛指在程序中同一个符号在不同的情况下具有不同解释的现象。

    超类中的方法在子类中可方法重写。

    3.抽象类:抽象方法充当着占位的角色,它们的具体实现在子类中。(抽象类只能产生子类。)

    4.Object:所有类的超类: Java中所有类的祖先——每一个类都由它扩展而来。在不给出超类的情况下,Java会自动把Object 作为要定义类的超类。(它们进行专门的操作都要进行类型转换。)

    Object类中的equals方法用于测试某个对象是否同另一个对象相等。它在Object类中的实现是判断两个对象是否具有相同的引用。如果两个对象具有相同的引用,它们一定是相等的。

     Object类中的hashCode方法导出某个对象的散列码。散列码是任意整数,表示对象的存储地址。(两个相等对象的散列码相等)

    5.泛型数组列表

    ArryList是一个采用类型参数的泛型类。为指定数组列表保存元素的对象类型,需要用一对尖括号将数组元素对象类名括起来加在后面。

    ArryList<Employee> staff=new ArrayList<Employee>();

    6.对象包装器与自动装箱:

    所有基本数据类型都有着与之对应的预定义类,它们被称为对象包装器。

    对象包装器类是不可变的,即一旦构造了包装器,就不允更改包装在其中的值。且对象包装器类还是final,因此不能定义它们的子类。

    自动的将基本数据类型转换为包装器类的对象,将这种变换称为自动打包

    7.参数数量可变的方法、

    用户自己可以定义可变参数的方法,并将参数指定为任意类型,甚至是基本类型。

    8.枚举类

     publicenumGrade{A,B,C,D,E};

    它包括一个关键字enum,一个新枚举类型的名字 Grade以及为Grade定义的一组值,这里的值既非整型,亦非字符型。

    枚举值并不是整数或其它类型,是被声明的枚举类的自身实例

    9.反射

    10.继承的设计技巧

    使用继承实现is-a”关系。

    在覆盖方法时,不要改变预期的行为。

    将公共操作和域放在超类。

    使用多态,而非类型信息。

    2.实验目的

    (1) 理解继承的定义

    (2) 掌握子类的定义要求

    (3) 掌握多态性的概念及用法

    (4) 掌握抽象类的定义及用途

    (5) 掌握类中4个成员访问权限修饰符的用途;

    (6) 掌握抽象类的定义方法及用途

    (7)掌握Object类用途及常用API;

    (8) 掌握ArrayList类的定义方法及用法

    (9) 掌握枚举类定义方法及用途。

    2、实验内容和步骤

    实验1 导入第5章示例程序,测试并进行代码注释。

    测试程序1:

    Ÿ elipse IDE中编辑、调试、运行程序5-1 (教材152-153

    Ÿ 掌握子类的定义及用法;

    Ÿ 结合程序运行结果,理解并总结OO风格程序构造特点,理解EmployeeManager类的关系子类的用途,并在代码中添加注释。

    package inheritance;

    /**

     * This program demonstrates inheritance.

     * @version 1.21 2004-02-21

     * @author Cay Horstmann

     */public class ManagerTest

    {

       public static void main(String[] args)

       {

          // 创建类

          Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);

          boss.setBonus(5000);//调用更改器

          Employee[] staff = new Employee[3];

          // fill the staff array with Manager and Employee objects

          staff[0] = boss;//父类对象可引用子类对象

          staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);

          staff[2] = new Employee("Tommy Tester", 40000, 1990, 3, 15);

          // 打印所有员工类的基本信息

          for (Employee e : staff)

             System.out.println("name=" + e.getName() + ",salary=" + e.getSalary());

       }

    }

    employee

    package inheritance;

    import java.time.*;

    public class Employee

    {

       private String name;

       private double salary;

       private LocalDate hireDay;

       public Employee(String name, double salary, int year, int month, int day)

       {

          this.name = name;

          this.salary = salary;

          hireDay = LocalDate.of(year, month, day);

       }

       public String getName()

       {

          return name;

       }

       public double getSalary()//访问器   {

          return salary;

       }

       public LocalDate getHireDay()

       {

          return hireDay;

       }

       public void raiseSalary(double byPercent)

       {

          double raise = salary * byPercent / 100;//涨工资

          salary += raise;

       }

    }

    Manager

    package inheritance;

    public class Manager extends Employee

    {

       private double bonus;

       /**

        * @param name the employee's name

        * @param salary the salary

        * @param year the hire year

        * @param month the hire month

        * @param day the hire day

        *

       public Manager(String name, double salary, int year, int month, int day)

       {

          super(name, salary, year, month, day);//调用父类的方法

          bonus = 0;

       }

       public double getSalary()//访问器   {

          double baseSalary = super.getSalary();//调用父类的方法

          return baseSalary + bonus;

       }

       public void setBonus(double b)//更改器   {

          bonus = b;

       }

    测试程序2

    Ÿ 编辑、编译、调试运行教材PersonTest程序(教材163-165)

    Ÿ 掌握超类的定义及其使用要求;

    Ÿ 掌握利用超类扩展子类的要求;

    Ÿ 在程序中相关代码处添加新知识的注释。

    package abstractClasses;

     

     /** 

     * This program demonstrates abstract classes.

     * @version 1.01 2004-02-21

      * @author Cay Horstmann

     */ 

     public class PersonTest

     {

    public static void main(String[] args)

      {

     // 抽象类

     Person[] people = new Person[2];

     

     // 用学生数组 

     people[0] = new Employee("Harry Hacker", 50000, 1989, 10, 1);

     people[1] = new Student("Maria Morris", "computer science");

     

     // 打印对象的名称和描述 

     for (Person p : people)

      System.out.println(p.getName() + ", " + p.getDescription());

     }

      }

    package abstractClasses; 

     public class Student extends Person 

     { 

       private String major; 

         /** 

         * @param nama the student's name 

    * @param major the student's major

         */

        public Student(String name, String major)

        {

          //  构造函数

           super(name);

           this.major = major;

        }

        public String getDescription()

        {

           return "a student majoring in " + major;

        }

     }

    person类 

      package abstractClasses; 

      public abstract class Person 

     { 

         //包含一个或多个抽象方法的类被称为抽象类

         //通用的作用域和方法也放到了这里   

     public abstract String getDescription();  

      private String name;  

    public Person(String name)

        {

           this.name = name;

        }

        public String getName()

        {       return name;    

    }

     }

    employee类

      package abstractClasses;   

     import java.time.*;   

     public class Employee extends Person 

     {     

    private double salary; 

    private LocalDate hireDay; 

         public Employee(String name, double salary, int year, int month, int day)

        {

           super(name);

           this.salary = salary;

           hireDay = LocalDate.of(year, month, day);

        }

       public double getSalary()    

    {      

     return salary;  

      }

        public LocalDate getHireDay()

        {

           return hireDay;

        }

       //返回一个格式化的字符串

        public String getDescription()

       {

          return String.format("an employee with a salary of $%.2f", salary);

        }

        public void raiseSalary(double byPercent)

        {

           double raise = salary * byPercent / 100;

           salary += raise;

        }

     }

    程序运行结果如下:

     

     

     

    测试程序3

    Ÿ 编辑、编译、调试运行教材程序5-85-95-10,结合程序运行结果理解程序(教材174-177页);

    Ÿ 掌握Object类的定义及用法;

    Ÿ 在程序中相关代码处添加新知识的注释。

    package abstractClasses; 

    person类 

      package abstractClasses; 

      public abstract class Person 

     { 

         //包含一个或多个抽象方法的类被称为抽象类

         //通用的作用域和方法也放到了这里   

     public abstract String getDescription();  

      private String name;  

    public Person(String name)

        {

           this.name = name;

        }

        public String getName()

        {       return name;    

    }

     }

    employee类

      package abstractClasses;   

     import java.time.*;   

     public class Employee extends Person 

     {     

    private double salary; 

    private LocalDate hireDay; 

         public Employee(String name, double salary, int year, int month, int day)

        {

           super(name);

           this.salary = salary;

           hireDay = LocalDate.of(year, month, day);

        }

       public double getSalary()    

    {      

     return salary;  

      }

        public LocalDate getHireDay()

        {

           return hireDay;

        }

       //返回一个格式化的字符串

        public String getDescription()

       {

          return String.format("an employee with a salary of $%.2f", salary);

        }

        public void raiseSalary(double byPercent)

        {

           double raise = salary * byPercent / 100;

           salary += raise;

        }

     }

    程序运行结果如下:

     

     

    测试程序3

    Ÿ 编辑、编译、调试运行教材程序5-85-95-10,结合程序运行结果理解程序(教材174-177页);

    Ÿ 掌握Object类的定义及用法;

    Ÿ 在程序中相关代码处添加新知识的注释。

    3)在程序中相关代码处添加新知识的注释。

    程序5-8如下:

      package equals; 

      

     /** 

      * This program demonstrates the equals method. 

     * @version 1.12 2012-01-26 6  * @author Cay Horstmann 

      */ 

     public class EqualsTest 

     {

    public static void main(String[] args)

        {

           Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);

           Employee alice2 = alice1;

           Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);

          Employee bob = new Employee("Bob Brandson", 50000, 1989, 10, 1)

    System.out.println("alice1 == alice2: " + (alice1 == alice2));

           System.out.println("alice1 == alice3: " + (alice1 == alice3));

           System.out.println("alice1.equals(alice3): " + alice1.equals(alice3));

          System.out.println("alice1.equals(bob): " + alice1.equals(bob));

           System.out.println("bob.toString(): " + bob);

           Manager carl = new Manager("Carl Cracker", 80000, 1987, 12, 15);

          Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);

           boss.setBonus(5000);

           System.out.println("boss.toString(): " + boss);

          System.out.println("carl.equals(boss): " + carl.equals(boss));

           System.out.println("alice1.hashCode(): " + alice1.hashCode());

           System.out.println("alice3.hashCode(): " + alice3.hashCode());

           System.out.println("bob.hashCode(): " + bob.hashCode());

           System.out.println("carl.hashCode(): " + carl.hashCode());

        }

     }

     Manager类

     package equals;

     public class Manager extends Employee 

     { 

    private double bonus; 

         public Manager(String name, double salary, int year, int month, int day)     

           super(name, salary, year, month, day);

           bonus = 0;

        }

       public double getSalary()

        {

           double baseSalary = super.getSalary();

           return baseSalary + bonus;

        }

        public void setBonus(double bonus)

        {

           this.bonus = bonus;

       }

        public boolean equals(Object otherObject

        {

          if (!super.equals(otherObject)) return false;

           Manager other = (Manager) otherObject;28       

    // 检查这个和其他属于同一个类       

    return bonus == other.bonus;

        }

        {      

     return java.util.Objects.hash(super.hashCode(), bonus);

        }

        public String toString()

        {

          return super.toString() + "[bonus=" + bonus + "]";

       }

     }

    employee类

      package equals; 

       import java.time.*; 

     import java.util.Objects; 

       public class Employee 

     { 

    private String name; 

        private double salary;

        private LocalDate hireDay;

        public Employee(String name, double salary, int year, int month, int day)

        {

           this.name = name;

          this.salary = salary;

           hireDay = LocalDate.of(year, month, day);

        }

        public String getName()

        {

           return name;

        }

        public double getSalary()

        {

           return salary;

        }

        public LocalDate getHireDay()

        {

           return hireDay;

        }

        public void raiseSalary(double byPercent)

        {

           double raise = salary * byPercent / 100;

           salary += raise;

        }  

     public boolean equals(Object otherObject)

        {

            //       这里获得一个对象参数,第一个if语句     

    if (this == otherObject) return true;

              if (otherObject == null) return false;

     //      getClass()方法是得到对象的类      

    if (getClass() != otherObject.getClass()) return false      

    // 现在我们知道另一个对象是非空雇员 //         

      Employee other = (Employee) otherObject;      

    // 测试字段是否具有相同的值      

     return Objects.equals(name, other.name) && salary == other.salary && Objects.equals(hireDay, other.hireDay);   

    }    

    public int hashCode()

     //   哈希散列   

     {      

     return Objects.hash(name, salary, hireDay);   

    } // toString()

      public String toString()

    return getClass().getName() + "[name=" + name + ",salary=" + salary + ",hireDay=" + hireDay

                 + "]";

        }

     }

    程序运行结果:

     

    测试程序4

    Ÿ elipse IDE中调试运行程序5-11(教材182页),结合程序运行结果理解程序;

    Ÿ 掌握ArrayList类的定义及用法;

    Ÿ 在程序中相关代码处添加新知识的注释。

    import java.util.*;

    /**
    * This program demonstrates the ArrayList class.
    * @version 1.11 2012-01-26
    * @author Cay Horstmann
    */
    public class ArrayListTest
    {
    public static void main(String[] args)
    {
    // 用三个雇员对象填充工作人员数组列表
    var staff = new ArrayList<Employee>();

    staff.add(new Employee("Carl Cracker", 75000, 1987, 12, 15));
    staff.add(new Employee("Harry Hacker", 50000, 1989, 10, 1));
    staff.add(new Employee("Tony Tester", 40000, 1990, 3, 15));

    // 把每个人的薪水提高5%
    for (Employee e : staff)
    e.raiseSalary(5);

    //打印所有员工对象的信息
    for (Employee e : staff)
    System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay="
    + e.getHireDay());
    }
    }

          Employee.Java

    import java.time.*;

    public class Employee
    {
    private String name;
    private double salary;
    private LocalDate hireDay;

    public Employee(String name, double salary, int year, int month, int day)
    {
    this.name = name;
    this.salary = salary;
    hireDay = LocalDate.of(year, month, day);
    }

    public String getName()
    {
    return name;
    }

    public double getSalary()
    {
    return salary;
    }

    public LocalDate getHireDay()
    {
    return hireDay;
    }

    public void raiseSalary(double byPercent)
    {
    double raise = salary * byPercent / 100;
    salary += raise;
    }
    }

    程序运行结果:

    测试程序5

    Ÿ 编辑、编译、调试运行程序5-12(教材189页),结合运行结果理解程序;

    Ÿ 掌握枚举类的定义及用法;

    import java.util.*;

    /**
    * This program demonstrates enumerated types.
    * @version 1.0 2004-05-24
    * @author Cay Horstmann
    */
    public class EnumTest
    {
    public static void main(String[] args)//程序入口
    {
    var in = new Scanner(System.in);//构造一个Scanner类
    System.out.print("Enter a size: (SMALL, MEDIUM, LARGE, EXTRA_LARGE) ");
    String input = in.next().toUpperCase();
    Size size = Enum.valueOf(Size.class, input);
    System.out.println("size=" + size);
    System.out.println("abbreviation=" + size.getAbbreviation());
    if (size == Size.EXTRA_LARGE)
    System.out.println("Good job--you paid attention to the _.");
    }
    }

    enum Size
    {
    SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");

    private Size(String abbreviation) { this.abbreviation = abbreviation; }
    public String getAbbreviation() { return abbreviation; }

    private String abbreviation;
    }

    程序运行结果:通过这几次实验就知道了很多关于

     

     

    实验2编程练习1

    Ÿ 定义抽象类Shape

    属性不可变常量double PI,值为3.14

    方法public double getPerimeter()public double getArea())

    Ÿ RectangleCircle继承自Shape类。

    Ÿ 编写double sumAllArea方法输出形状数组中的面积和和double sumAllPerimeter方法输出形状数组中的周长和。

    Ÿ main方法中

    1输入整型值n,然后建立n个不同的形状。如果输入rect,则再输入长和宽。如果输入cir,则再输入半径。
    2 然后输出所有的形状的周长之和,面积之和。并将所有的形状信息以样例的格式输出。
    3 最后输出每个形状的类型与父类型使用类似shape.getClass()(获得类型)shape.getClass().getSuperclass()(获得父类型);

    思考sumAllAreasumAllPerimeter方法放在哪个类中更合适?

    输入样例:

    3

    rect

    1 1

    rect

    2 2

    cir

    1

    输出样例:

    18.28

    8.14

    [Rectangle [width=1, length=1], Rectangle [width=2, length=2], Circle [radius=1]]

    class Rectangle,class Shape

    class Rectangle,class Shape

    class Circle,class Shape

    package Cin;

    import Cin. Shape; class 圆形 extends Shape{

        private double PI=3.14;

        private int r;

        public void 圆形(int r) {

           this.r = r;

            }

        double getPerimeter(){

        return 2 * PI * r;

        }

        double getArea(){

        return r * r*PI;

        }

     }

    package Cin;

    import Cin. Shape;

    class 长方形 extends Shape{

     private int width;

     private int length;

         public 长方形(int width2, int length2) {   // TODO Auto-generated constructor stub  }

      public void 长方形(int length, int width) {

         this.width = width;

         this.length = length;

         }

         double getPerimeter(){

            return 2*(length+width);

         }      double getArea(){      return length*width;  } }

    package Cin;

    import Cin.Shape;

    abstract class Shape { //定义抽象父类Shape  abstract double getPerimeter(); //定义求解周长的方法    abstract double getArea(); //定义求解面积的方法    }

       class Rectangle extends Shape{    private int length;   

    private int width;    public Rectangle(int length, int width) {       

    this.length = length;        this.width = width;    }    //继承父类    double getPerimeter(){ //调用父类求周长的方法    return 2*(length+width);    }    double getArea(){    return length*width; //调用父类求面积的方法    }    }

       class Circle extends Shape{    private int radius;   

    public Circle(int radius) {        this.radius = radius;    }  

      double getPerimeter(){    return 2 * Math.PI * radius;    }    double getArea(){    return Math.PI * radius * radius;    }    }

    package Cin; import Cin.Shape; import Cin.Test; import Cin.圆形; import Cin.长方形; import java.util.Scanner; public class Test {   double PI=3.14;

      public double AllArea(Shape score[])

          {

          double sum=0;

          for(int i=0;i<score.length;i++)

              sum+= score[i].getArea();

              return sum;

          }

          public double AllPerimeter(Shape score[])

          {

          double sum=0;

          for(int i=0;i<score.length;i++)

              sum+= score[i].getPerimeter();

              return sum;

          }

         

      public static void main(String[] args) {

             Scanner in = new Scanner(System.in);

             System.out.println("请输入创建图形的个数");

             int a = in.nextInt();

             System.out.println("请输入图形种类(选择输入cirrect");

             String rect="rect";

             String cir="cir";

             Shape[] num=new Shape[a];

             for(int i=0;i<a;i++){

                String input=in.next();

             if(input.equals(rect)) {

                System.out.println("请输入长和宽");

              int width = in.nextInt();

              int length = in.nextInt();

               num[i]=new 长方形(width,length);

               System.out.println("长方形["+"长方形的长为:"+length+"  长方形的宽为:"+width+"]");

               }

             if(input.equals(cir)) {

                 System.out.println("输入所创建的圆的半径");

             int r = in.nextInt();

             num[i]=new 圆形();

             System.out.println("["+"圆的半径为:"+r+"]");

             }

             }

             Test c=new Test();

             System.out.println("求所有图形的面积和:");

             System.out.println(c.AllPerimeter(num));

             System.out.println("求所有图形的周长和:");

             System.out.println(c.AllArea(num));

       for(Shape s:num) {

              System.out.println(s.getClass()+","+s.getClass().getSuperclass());           }       }   }

     

    实验3 编程练习2

    编制一个程序,将身份证号.txt 中的信息读入到内存中,输入一个身份证号或姓名,查询显示查询对象的姓名、身份证号、年龄、性别和出生地。

    package zbiuhxb;

    import java.io.BufferedReader;

      import java.io.File;

      import java.io.FileReader;

     import java.io.IOException;import java.util.ArrayList;

     import java.util.Scanner;

      

     public class Identity {

         private static ArrayList<Student>studentlist  = null;

         public static void main(String args[]) {

        

             studentlist = new ArrayList<>();

             Scanner scanner = new Scanner(System.in);

             File file = new File("c:/身份证号.txt" );

             BufferedReader reader = null;

             try {

                 reader = new BufferedReader(new FileReader(file));

              

                 String temp = null;

                 while ((temp = reader.readLine()) != null) {

                     Scanner linescanner = new Scanner(temp);

                     linescanner.useDelimiter(" ");   

                     String name = linescanner.next();

                     String number = linescanner.next();

                     String sex = linescanner.next();

                     String age = linescanner.next();

                     String province =linescanner.nextLine();

                      

                       Student student = new Student();

                       student.setName(name);

                       student.setnumber(number);

                       student.setsex(sex);

                       student.setage(age);

                       student.setprovince(province);

                       studentlist.add(student);

                          

                    }

                   

                 reader.close();

             } catch (IOException e) { //读错            e.printStackTrace();

            }

              

          

            int status=1;

               while (status!=0)

                  {

                      

                     System.out.println("1:通过姓名查询");

                     System.out.println("2:通过身份证号查询");

                    System.out.println("0:退出");

                    

                     status = scanner.nextInt();

                    switch (status) {

                     

                     case 1:             

                         System.out.println("请输入姓名:");

                        String scanner1 = scanner.next();

                         

                         int nameint = findStudentByName(scanner1);

                         if(nameint != -1) {

                           System.out.println("查找信息为:身份证号:"

                                   + studentlist.get(nameint).getnumber() + "    姓名:"

                                   + studentlist.get(nameint).getName() +"    性别:"

                                   +studentlist.get(nameint).getsex()   +"    年龄:"

                                   +studentlist.get(nameint).getage()+"  地址:"

                                   +studentlist.get(nameint).getprovince()

                                   );

                          

                         } break;

                     case 2:

                         System.out.println("请输入身份证号:");

                       

                         String studentid = scanner.next();

                         int id = findStudentById(studentid);

                       if (id != -1) {

                           System.out.println("查找信息为:身份证号:"

                                   + studentlist.get(id ).getnumber() + "    姓名:"

                                   + studentlist.get(id ).getName() +"    性别:"

                                   +studentlist.get(id ).getsex()   +"    年龄:"

                                   +studentlist.get(id ).getage()+"   地址:"

                                   +studentlist.get(id ).getprovince()

                                   );

                         

                    }break;

                     

                     case 0:

                         status = 0;

                         System.out.println("程序已退出!");

                         break;

                    default:

                        System.out.println("输入错误");

                    }

                  }

            }

          

        public static int findStudentByName(String name) {

            int flag = -1;

            int a[];

            for (int i = 0; i < studentlist.size(); i++) {

                if (studentlist.get(i).getName().equals(name)) {

                    flag= i;

                }

            }

            return flag;

        }

             

         

            public static int findStudentById(String id) {

                int flag = -1;

                for (int i = 0; i < studentlist.size(); i++) {

                    if (studentlist.get(i).getnumber().equals(id)) {

                        flag = i;

                    }

                }

                return flag;

            }

     }

      

    package zbiuhxb;

    public class Student {

        private String name;

        private    String number ;

        private    String sex ;

        private    String age;

        private    String province;

         

        public String getName() {

            return name;

        }

        public void setName(String name) {

            this.name = name;

        }

        public String getnumber() {

            return number;

        }

        public void setnumber(String number) {

            this.number = number;

        }

        public String getsex() {

            return sex ;

        }

        public void setsex(String sex ) {

            this.sex =sex ;

        }

        public String getage() {

            return age;

        }

        public void setage(String age ) {

            this.age=age ;

        }

        public String getprovince() {

            return province;

        }

        public void setprovince(String province) {

            this.province=province ;

        }

    }

    运行结果:

     

    实验总结:通过本次实验什么都在瞎折腾,明确明白我啥都没学上。

  • 相关阅读:
    个人冲刺二(2)
    个人冲刺二(1)
    三个和尚观后感
    每日总结
    个人冲刺(10)
    个人冲刺(9)
    个人冲刺(8)
    个人冲刺(7)
    个人冲刺(6)
    下次视频面试前把电脑摄像头擦干净吧
  • 原文地址:https://www.cnblogs.com/baimaciren/p/9750748.html
Copyright © 2011-2022 走看看