201871010133-赵永军《面向对象程序设计(java)》第七周学习总结

项目

内容

这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/
这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11654436.html
作业学习目标
  1. 掌握四种访问权限修饰符的使用特点;
  2. 掌握Object类的用途及常用API;
  3. 掌握ArrayList类的定义方法及用途;
  4. 掌握枚举类定义方法及用途;
  5. 结合本章实验内容,理解继承与多态性两个面向对象程序设计特征,并体会其优点。

一、实验内容和步骤

实验1: 在“System.out.println(...);”语句处按注释要求设计代码替换...,观察代码录入中IDE提示,以验证四种权限修饰符的用法。

实验代码:

  1. class Parent {
  2. private String p1 = "这是Parent的私有属性";
  3. public String p2 = "这是Parent的公有属性";
  4. protected String p3 = "这是Parent受保护的属性";
  5. String p4 = "这是Parent的默认属性";
  6. private void pMethod1() {
  7. System.out.println("我是Parent用private修饰符修饰的方法");
  8. }
  9. public void pMethod2() {
  10. System.out.println("我是Parent用public修饰符修饰的方法");
  11. }
  12. protected void pMethod3() {
  13. System.out.println("我是Parent用protected修饰符修饰的方法");
  14. }
  15. void pMethod4() {
  16. System.out.println("我是Parent无修饰符修饰的方法");
  17. }
  18. }
  19. class Son extends Parent{
  20. private String s1 = "这是Son的私有属性";
  21. public String s2 = "这是Son的公有属性";
  22. protected String s3 = "这是Son受保护的属性";
  23. String s4 = "这是Son的默认属性";
  24. public void sMethod1() {
  25. System.out.println(p2);//分别尝试显示Parent类的p1、p2、p3、p4值
  26. System.out.println(p3);
  27. System.out.println(p4);
  28. System.out.println("我是Son用public修饰符修饰的方法");
  29. }
  30. private void sMethod2() {
  31. System.out.println("我是Son用private修饰符修饰的方法");
  32. }
  33. protected void sMethod3() {
  34. System.out.println("我是Son用protected修饰符修饰的方法");
  35. }
  36. void sMethod4() {
  37. System.out.println("我是Son无修饰符修饰的方法");
  38. }
  39. }
  40. public class Demo {
  41. public static void main(String[] args) {
  42. Parent parent=new Parent();
  43. Son son=new Son();
  44. parent.pMethod2(); //分别尝试用parent调用Paren类的方法、用son调用Son类的方法
  45. parent.pMethod3();
  46. parent.pMethod4();
  47. son.pMethod2();
  48. son.pMethod3();
  49. son.pMethod4();
  50. son.sMethod1();
  51. son.sMethod3();
  52. son.sMethod4();
  53. }
  54. }

实验运行结果如图所示:

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

测试程序1:

  (1)运行教材程序5-8、5-9、5-10,结合程序运行结果理解程序(教材174页-177页);

  (2)删除程序中Employee类、Manager类中的equals()、hasCode()、toString()方法,背录删除方法,在代码录入中理解类中重写Object父类方法的技术要点。

测试程序2:

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

 (2)掌握ArrayList类的定义及用法;

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

 (4)设计适当的代码,测试ArrayList类的set()、get()、remove()、size()等方法的用法。

测试程序3:

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

 (2)掌握枚举类的定义及用法;

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

 (4)删除程序中Size枚举类,背录删除代码,在代码录入中掌握枚举类的定义要求。

测试程序4:录入以下代码,结合程序运行结果了解方法的可变参数用法

public class TestVarArgus {

public static void dealArray(int... intArray){

for (int i : intArray)

System.out.print(i +" ");

System.out.println();

}

public static void main(String args[]){

dealArray();

dealArray(1);

dealArray(1, 2, 3);

}

}

测试程序1

实验代码:

EqualsTest类:

  1. public class EqualsTest
  2. {
  3. public static void main(String[] args)
  4. {
  5. var alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
  6. var alice2 = alice1;
  7. var alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
  8. var bob = new Employee("Bob Brandson", 50000, 1989, 10, 1);
  9.  
  10. System.out.println("alice1 == alice2: " + (alice1 == alice2));
  11.  
  12. System.out.println("alice1 == alice3: " + (alice1 == alice3));
  13.  
  14. System.out.println("alice1.equals(alice3): " + alice1.equals(alice3));
  15.  
  16. System.out.println("alice1.equals(bob): " + alice1.equals(bob));
  17.  
  18. System.out.println("bob.toString(): " + bob);
  19.  
  20. var carl = new Manager("Carl Cracker", 80000, 1987, 12, 15);
  21. var boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);
  22. boss.setBonus(5000);
  23. System.out.println("boss.toString(): " + boss);
  24. System.out.println("carl.equals(boss): " + carl.equals(boss));
  25. System.out.println("alice1.hashCode(): " + alice1.hashCode());
  26. System.out.println("alice3.hashCode(): " + alice3.hashCode());
  27. System.out.println("bob.hashCode(): " + bob.hashCode());
  28. System.out.println("carl.hashCode(): " + carl.hashCode());
  29. }
  30. }

Employee类:

  1. package zyj;
  2.  
  3. import java.time.*;
  4. import java.util.Objects;
  5.  
  6. public class Employee
  7. {
  8. private String name;
  9. private double salary;
  10. private LocalDate hireDay;
  11.  
  12. public Employee(String name, double salary, int year, int month, int day)
  13. {
  14. this.name = name;
  15. this.salary = salary;
  16. hireDay = LocalDate.of(year, month, day);
  17. }
  18.  
  19. public String getName()
  20. {
  21. return name;
  22. }
  23.  
  24. public double getSalary()
  25. {
  26. return salary;
  27. }
  28.  
  29. public LocalDate getHireDay()
  30. {
  31. return hireDay;
  32. }
  33.  
  34. public void raiseSalary(double byPercent)
  35. {
  36. double raise = salary * byPercent / 100;
  37. salary += raise;
  38. }
  39.  
  40. public boolean equals(Object otherObject)
  41. {
  42. // a quick test to see if the objects are identical
  43. if (this == otherObject) return true;
  44.  
  45. // must return false if the explicit parameter is null
  46. if (otherObject == null) return false;
  47.  
  48. // if the classes don't match, they can't be equal
  49. if (getClass() != otherObject.getClass()) return false;
  50.  
  51. // now we know otherObject is a non-null Employee
  52. var other = (Employee) otherObject;
  53. return false;
  54. }
  55.  
  56. public int hashCode()
  57. {
  58. return Objects.hash(name, salary, hireDay);
  59. }
  60.  
  61. public String toString()
  62. {
  63. return getClass().getName() + "[name=" + name + ",salary=" + salary + ",hireDay="
  64. + hireDay + "]";
  65. }
  66. }

Manage类:

  1. package zyj;
  2.  
  3. public class Manager extends Employee
  4. {
  5. private double bonus;
  6.  
  7. public Manager(String name, double salary, int year, int month, int day)
  8. {
  9. super(name, salary, year, month, day);
  10. bonus = 0;
  11. }
  12.  
  13. public double getSalary()
  14. {
  15. double baseSalary = super.getSalary();
  16. return baseSalary + bonus;
  17. }
  18.  
  19. public void setBonus(double bonus)
  20. {
  21. this.bonus = bonus;
  22. }
  23.  
  24. }

程序运行结果如图所示:

1)Object类是所有Java类的祖先。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法在不明确给出超类的情况下,java会自动把object作为要定义类的超类。

2)可以使用类型为object的变量指向任意类型的对象。

3)object类有一个默认构造方法public object(),在构造子类时,都会先调用这个默认构造方法。

测试程序2:

实验代码:

ArrayListTest类:

  1. import java.util.*;
  2.  
  3. /**
  4. * This program demonstrates the ArrayList class.
  5. * @version 1.11 2012-01-26
  6. * @author Cay Horstmann
  7. */
  8. public class ArrayListTest//主类
  9. {
  10. public static void main(String[] args)
  11. {
  12. //用三个Employee类填充staff数组列表
  13. ArrayList<Employee> staff = new ArrayList<>();//动态数组,可以灵活设置数组的大小
  14.  
  15. staff.add(new Employee("Carl Cracker", 75000, 1987, 12, 15));
  16. staff.add(new Employee("Harry Hacker", 50000, 1989, 10, 1));
  17. staff.add(new Employee("Tony Tester", 40000, 1990, 3, 15));
  18.  
  19. //将每个人的薪水提高5%
  20. for (Employee e : staff)
  21. e.raiseSalary(5);
  22.  
  23. //打印出所有Employee类的信息
  24. for (Employee e : staff)
  25. System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay="
  26. + e.getHireDay());
  27. }
  28. }

Employee类:

  1. import java.time.*;
  2.  
  3. public class Employee
  4. {
  5. private String name;
  6. private double salary;
  7. private LocalDate hireDay;
  8. //创建三个私有属性
  9. public Employee(String name, double salary, int year, int month, int day)//构造器
  10. {
  11. this.name = name;
  12. this.salary = salary;
  13. hireDay = LocalDate.of(year, month, day);
  14. }
  15.  
  16. public String getName()
  17. {
  18. return name;
  19. }
  20.  
  21. public double getSalary()
  22. {
  23. return salary;
  24. }
  25.  
  26. public LocalDate getHireDay()
  27. {
  28. return hireDay;
  29. }
  30. //访问器
  31. public void raiseSalary(double byPercent)
  32. {
  33. double raise = salary * byPercent / 100;
  34. salary += raise;
  35. }//定义两个局部变量
  36. }

程序运行结果如图所示:

ArrayList 即动态数组,它可以动态的增加和减少元素,灵活设置数组的大小。
ArrayList提供了三个构造器: 
public ArrayList(); 默认的构造器
public ArrayList(ICollection); 
public ArrayList(int); 用指定的大小来初始化内部的数组

测试程序3:

实验代码:

  1. import java.util.*;
  2.  
  3. /**
  4. * This program demonstrates enumerated types.
  5. * @version 1.0 2004-05-24
  6. * @author Cay Horstmann
  7. */
  8. public class EnumTest//主类
  9. {
  10. public static void main(String[] args)
  11. {
  12. Scanner in = new Scanner(System.in);
  13. System.out.print("Enter a size: (SMALL, MEDIUM, LARGE, EXTRA_LARGE) ");
  14. String input = in.next().toUpperCase();//字符串转换为大写
  15. Size size = Enum.valueOf(Size.class, input);
  16. System.out.println("size=" + size);
  17. System.out.println("abbreviation=" + size.getAbbreviation());
  18. if (size == Size.EXTRA_LARGE)
  19. System.out.println("Good job--you paid attention to the _.");
  20. }
  21. }
  22.  
  23. enum Size//枚举类型(都是enum的子类)
  24. {
  25. SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL");//传入参数
  26.  
  27. private Size(String abbreviation) { this.abbreviation = abbreviation; }
  28. public String getAbbreviation() { return abbreviation; }
  29.  
  30. private String abbreviation;
  31. }

程序运行结果如下:

创建枚举类型要使用 Enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类。

枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰。

枚举类的使用private final 修饰的属性应该在构造器中为其赋值。
若枚举类显式的定义了带参数的构造器,则在列出枚举值时也必须对应的传入参数。
测试程序4:
实验代码

  1. public class TestVarArgus {
  2. public static void dealArray(int... intArray){
  3. for (int i : intArray)
  4. System.out.print(i +" ");
  5.  
  6. System.out.println();
  7. }
  8. public static void main(String args[]){
  9. dealArray();
  10. dealArray(1);
  11. dealArray(1, 2, 3);
  12. }
  13. }

程序运行结果如下:

输出字符串

实验代码:

  1. public class TestVarArgus {
  2. public static void dealArray(String... StringArray){ //定义为字符串,在下面就只能输入字符串,不能输入其他的,例如整型等等
  3. for (String string : StringArray)
  4. System.out.print(string +" ");
  5.  
  6. System.out.println();
  7. }
  8. public static void main(String args[]){
  9. dealArray("计算机与工程学院");
  10. dealArray("计算机科学与技术一班");
  11. dealArray("赵永军");
  12. }
  13. }

实验测试程序如下:

实验:3:编程练习:参照输出样例补全程序,使程序输出结果与输出样例一致。

public class Demo {

public static void main(String[] args) {

Son son = new Son();

son.method();

}

}

class Parent {

Parent() {

System.out.println("Parent's Constructor without parameter");

}

Parent(boolean b) {

System.out.println("Parent's Constructor with a boolean parameter");

}

public void method() {

System.out.println("Parent's method()");

}

}

class Son extends Parent {

//补全本类定义

}

程序运行结果如下:

Parent's Constructor with a boolean parameter

Son's Constructor without parameter

Son's method()

Parent's method()

实验代码:

  1. public class Demo {
  2. public static void main(String[] args) {
  3. Son son = new Son();
  4. son.method();
  5. }
  6. }
  7. class Parent {
  8. Parent() {
  9. System.out.println("Parent's Constructor without parameter");
  10. }
  11. Parent(boolean b) {
  12. System.out.println("Parent's Constructor with a boolean parameter");
  13. }
  14. public void method() {
  15. System.out.println("Parent's method()");
  16. }
  17. }
  18. class Son extends Parent {
  19. //补全本类定义
  20. Son(){
  21. super(false);
  22. System.out.println("Son's Constructor without parameter");
  23. }
  24. public void method() {
  25. System.out.println("Son's method()");
  26. super.method();
  27. }
  28. }

程序运行结果如下:

二、实验总结

在前几周的学习基础上,这周又学习了第五章,相比之前,加深了对继承类、抽象类以及多态的学习。但对于后面学习的枚举类等新知识,在学习理论知识时,觉得已经基本掌握了。但在实验过程中发现自己还是不会运用。在做测试题的时候,很多基础知识都不会,还是自己平时没有多看书,对基础知识掌握不到位。对于编程题,一方面是pta平台上只要出一点格式错误程序就会显示错误,另外是自己的知识还不够,因此几乎不能完整的做出实验。在以后的学习中,我会多多pta平台上练习编程,来保证自己程序的严谨和准确性。

201871010133-赵永军《面向对象程序设计(java)》第七周学习总结的更多相关文章

  1. 201771010134杨其菊《面向对象程序设计java》第九周学习总结

                                                                      第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...

  2. 扎西平措 201571030332《面向对象程序设计 Java 》第一周学习总结

    <面向对象程序设计(java)>第一周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 ...

  3. 201871010132-张潇潇《面向对象程序设计(java)》第一周学习总结

    面向对象程序设计(Java) 博文正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cn ...

  4. 杨其菊201771010134《面向对象程序设计Java》第二周学习总结

    第三章 Java基本程序设计结构 第一部分:(理论知识部分) 本章主要学习:基本内容:数据类型:变量:运算符:类型转换,字符串,输入输出,控制流程,大数值以及数组. 1.基本概念: 1)标识符:由字母 ...

  5. 201871010124 王生涛《面向对象程序设计JAVA》第一周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://edu.cnblogs.com/campus/xbsf/ ...

  6. 201871010115——马北《面向对象程序设计JAVA》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  7. 201777010217-金云馨《面向对象程序设计(Java)》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  8. 201871010132——张潇潇《面向对象程序设计JAVA》第二周学习总结

    项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...

  9. 201771010123汪慧和《面向对象程序设计Java》第二周学习总结

    一.理论知识部分 1.标识符由字母.下划线.美元符号和数字组成, 且第一个符号不能为数字.标识符可用作: 类名.变量名.方法名.数组名.文件名等.第二部分:理论知识学习部分 2.关键字就是Java语言 ...

  10. 201521123061 《Java程序设计》第七周学习总结

    201521123061 <Java程序设计>第七周学习总结 1. 本周学习总结 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源代码 贴上源 ...

随机推荐

  1. 鲜贝7.3--postman安装

    Postman电脑客户端安装: Postman的安装非常简单,在windows系统只需要双击安装包,然后什么都不需要操作,它直接就自己完成了,如下图.如果是mac 也是跟普通软件的安装方法相同.在初次 ...

  2. <BackTracking> permutation 254 47 60

    254. Factor Combinations class Solution { public List<List<Integer>> getFactors(int n) { ...

  3. 【2019.8.14 慈溪模拟赛 T1】我不是!我没有!别瞎说啊!(notme)(BFS+DP)

    \(IDA^*\) 说实话,这道题我一开始没想出正解,于是写了一个\(IDA^*\)... 但神奇的是,这个\(IDA^*\)居然连字符串长度分别为\(2500,4000\)的数据都跑得飞快,不过数据 ...

  4. [CEOI2019]Cubeword(暴力)

    没错,标签就是暴力. 首先发现棱上的所有词长度都相等,枚举长度 \(len\). 然后发现这些词中只有第一个字符和最后一个字符比较重要(只有这两个位置会与别的串衔接,中间的是啥无所谓). 令 \(cn ...

  5. xLua 学习

    xLua https://github.com/Tencent/xLua 文档 https://tencent.github.io/xLua/public/v1/guide/index.html FA ...

  6. spring boot 开启https

    1.生成证书 keytool -genkey -alias tomcat -keyalg RSA -keystore E:/https.keystore 将生成好的证书放在项目根目录即可 2 修改配置 ...

  7. Python 下载图片的三种方法

    import os os.makedirs('./image/', exist_ok=True) IMAGE_URL = "http://image.nationalgeographic.c ...

  8. Vue devtool插件安装后无法使用,提示“vue.js not detected”的解决方法

    vue devtool下载 极简插件  github vue devtool安装 点击谷歌浏览器箭头所指图标-更多工具-扩展程序   ①:直接将后缀为crx的安装包拖进下图区域即可自动安装     ② ...

  9. 奥展项目笔记04--Spring cloud 通过父工程打包多个子工程,导出可运行的Jar包

    在spring cloud微服务搭建过程中,我们创建了多个微服务模块,如图: 1.父工程Pom文件 <?xml version="1.0" encoding="UT ...

  10. 【转】asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程

    最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...