常惠琢201771010102《面向对象程序设计(java)》第七周学习总结

hongyanohongyan hongyanohongyan     2023-01-07     663

关键词:

实验七 继承附加实验

实验时间 2018-10-11

1、实验目的与要求

1)进一步理解4个成员访问权限修饰符的用途; 

2)掌握Object类的常用API用法;

3)掌握ArrayList类用法与常用API

4)掌握枚举类使用方法;

5)结合本章知识,理解继承与多态性两个面向对象程序设计特征,并体会其优点;

6)熟练掌握Java语言中基于类、继承技术构造程序的语法知识(ch1-ch5)

7)利用已掌握Java语言程序设计知识,学习设计开发含有1个主类、2个以上用户自定义类的应用程序。

2、实验内容和步骤

实验1  补充以下程序中主类内main方法体,以验证四种权限修饰符的用法。

public class TEST1

private String t1 = "这是TEST1的私有属性";

public String t2 = "这是TEST1的公有属性";

protected String t3 = "这是TEST1受保护的属性";

String t4 = "这是TEST1的默认属性";

    private void tese1() 

System.out.println("我是TEST1用private修饰符修饰的方法");

public void tese2()

System.out.println("我是TEST1用public修饰符修饰的方法");

protected void tese3()

System.out.println("我是TEST1用protected修饰符修饰的方法");

void tese4()

System.out.println("我是TEST1无修饰符修饰的方法");

public class TEST2 extends TEST1

  private String e1 = "这是TEST2的私有属性";

  public String e2 = "这是TEST2的公有属性";

  protected String e3 = "这是TEST2受保护的属性";

  String e4 = "这是TEST2的默认属性";

  public void demo1()

  System.out.println("我是TEST2用public修饰符修饰的方法");

  

  private void demo2() 

  System.out.println("我是TEST2用private修饰符修饰的方法");

  

  protected void demo3()

  System.out.println("我是TEST2用protected修饰符修饰的方法");

  

  void demo4()

  System.out.println("我是TEST2无修饰符修饰的方法");

  

public  class  Main

public static void main(String[] args)

TEST2 test2 = new TEST2();

/*在下面分别调用 demo1 demo2 demo3 demo4 test1 test2 test3 test4方法

和t1 t2 t3 t3 e1 e2 e3 e4属性,好好理解继承和权限修饰符的用法与区别*/

    test2.demo1();

    test2.demo3();

    String e2=test2.e2;

    System.out.println(e2);

技术分享图片

实验2  第五章测试程序反思,继承知识总结。

测试程序1

编辑、编译、调试运行教材程序5-85-95-10(教材174-177页);

结合程序运行结果,理解程序代码,掌握Object类的定义及用法;

 

package equals;

/**
 * 这个程序演示了等值方法  
 * @version 1.12 2012-01-26
 * @author Cay Horstmann
 */
  //实现了Employee类和Manager类的equals、hashCode和toString方法
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());
   

 

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 (this == otherObject) return true;

      // 如果explicit的参数为null,则必须返回false
      if (otherObject == null) return false;

      //如果类不匹配,它们就不能相等。 
      if (getClass() != otherObject.getClass()) return false;

      // 现在我们知道另一个对象是非null的Employee类
      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); 
   

   public String toString()
   
      return getClass().getName() + "[name=" + name + ",salary=" + salary + ",hireDay=" + hireDay
            + "]";
   

 

 

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;
      // Suff.Enter检查这个和其他属于同一个类。  
      return bonus == other.bonus;
   

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

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

 技术分享图片

测试程序2

编辑、编译、调试运行教材程序5-11(教材182页);

结合程序运行结果,理解程序代码,掌握ArrayList类的定义及用法;

 

package arrayList;

import java.util.*;

/**
 * 这个程序演示了ARAYLIST类.
 * @version 1.11 2012-01-26
 * @author Cay Horstmann
 */
public class ArrayListTest

   public static void main(String[] args)
   
      // 用三名员工对象填写员工数组列表 
      ArrayList<Employee> staff = new ArrayList<>();

      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());
   

 

package arrayList;

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;
   

技术分享图片

 测试程序3

编辑、编译、调试运行程序5-12(教材189页);

结合运行结果,理解程序代码,掌握枚举类的定义及用法;

 

package enums;

import java.util.*;

/**
 * 这个程序演示枚举类型 .
 * @version 1.0 2004-05-24
 * @author Cay Horstmann
 */
public class EnumTest
  
	// 所有枚举类型都是Enum的子类
   public static void main(String[] args)
     
      Scanner in = new Scanner(System.in);
      System.out.print("Enter a size: (SMALL, MEDIUM, LARGE, EXTRA_LARGE) ");
      String input = in.next().toUpperCase();
      Size size = Enum.valueOf(Size.class, input);
      //将size设置成Size.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;

技术分享图片

技术分享图片 

实验3采用个人账号登录https://pintia.cn/完成《2018秋季西北师范大学面向对象程序设计(Java)(ch1-ch5)测试题2》,测试时间60分钟;

实验4: 课后完成实验3未完成的测试内容。

实验总结:

    这次实验让我在前一次实验的基础上对继承有了进一步的了解,但通过测试发现了很多的问题,我会利用闲暇时间进一步的学习这一章和后面的内容,同时复习前面的章节内容,希望对Java可以有更深一步的了解。

 

201771010102常惠琢《2018面向对象程序设计(java)》第9周学习总结(代码片段)

实验九 异常、断言与日志实验时间 2018-10-251、实验目的与要求(1) 掌握java异常处理技术;(2) 了解断言的用法;(3) 了解日志的用途;(4) 掌握程序基础调试技巧;2、实验内容和步骤实验1:用命令行与IDE两种... 查看详情

201771010102常惠琢《2018面向对象程序设计(java)》第11周学习总结(代码片段)

实验十一  集合实验时间2018-11-81、实验目的与要求(1)掌握Vetor、Stack、Hashtable三个类的用途及常用API;(2)了解java集合框架体系组成;(3)掌握ArrayList、LinkList两个类的用途及常用API。(4)了解HashSet类、TreeSet类的用途及常用API... 查看详情

201771010102常惠琢《2018面向对象程序设计(java)》第10周学习总结(代码片段)

实验十  泛型程序设计技术实验时间 2018-11-11、实验目的与要求(1) 理解泛型概念;(2) 掌握泛型类的定义与使用;(3) 掌握泛型方法的声明与使用;(4) 掌握泛型接口的定义与实现;(5)了解泛型程序设计,... 查看详情

201771010102常惠琢2018面向对象程序设计(java)第18周学习总结(代码片段)

实验十八  总复习实验时间 2018-12-301、实验目的与要求(1) 综合掌握java基本程序结构; (2) 综合掌握java面向对象程序设计特点;(3) 综合掌握java GUI 程序设计结构;(4) 综合掌握java多线程编程模... 查看详情

常惠琢201771010102《面向对象程序设计(java)》第十七周学习总结(代码片段)

实验十七  线程同步控制实验时间 2018-12-101、实验目的与要求(1) 掌握线程同步的概念及实现技术; (2) 线程综合编程练习2、实验内容和步骤实验1:测试程序并进行代码注释。测试程序1:l 在Elipse环境下... 查看详情

面向对象程序设计介绍以及面向对象的基本特征

  面向对象的程序设计(ObjectOrientedProgramming,OOP)方法是目前比较流行的程序设计方法,和面向过程的程序设计比,它更符合人类的自然思维方式。在面向过程程序设计中,程序=数据+算法,数据和对数据的操作是分离的,如... 查看详情

《面向对象程序设计概述》牛咏梅

面向对象程序设计概述牛咏梅(南阳理工学院河南南阳473000)摘要:分析传统程序设计方法与面向对象程序设计方法之间的差别,重点分析了面向对象程序设计方法的特点,介绍了面向对象程序设计方法的步骤及其优点。关键词:面向对... 查看详情

java面向对象大致梳理

...概述:Java设计语言面向对象:Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物,每种事物都... 查看详情

面向对象的程序设计

阅读目录一面向对象的程序设计的由来二什么是面向对象的程序设计及为什么要有它三类与对象四属性查找五绑定到对象的方法的特殊之处六对象之间的交互七练习八继承与派生九多态与多态性十封装十一绑定方法与非绑定方法... 查看详情

面向对象思想

...0年代,位于美国加州的Xerox研究中心推出smalltalk语言及其程序设计环境,使得面向对象程序设计方法得到比较完善的实现,掀起了面向对象研究的高潮。到80年代中后期,面向对象的软件设计和程序设计方法 查看详情

面向对象设计----软件设计师

上午12分下午两大答题30分面向对象的基本概念❤❤❤❤❤采用面向对象的软件开发,通常由面向对象分析,面向对象设计,面向对象实现1面向对象分析OOA:获取对应用问题的理解,主要任务是抽取和整理用户需求并建立问题域精确模... 查看详情

面向对象分析与设计面向对象设计包括哪些内容

一、总述面向对象分析的输入是用户的功能需求,输出是简单的、理性化的分析模型,此阶段的工作更多侧重于如何理解软件的功能需求;面向对象设计的输入是面向对象分析的结果,蔬菜水果最终的、细化后的设计模型,此阶... 查看详情

面向对象思想初识

面向对象思想概述Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物,每种事物都具备自己的... 查看详情

面向过程程序设计,面向对象程序设计,可视化程序设计的异同

...开-闭原则。也使代码更易阅读。相对而言,面向过程的程序设计是面向对象程序设计的基础。面向对象的程序里面一定会有面向过程的程序片断的!可视化程序设计主要是一种技术 参考技术B这些是阶梯型向上发展的,一个比一... 查看详情

面向对象程序设计的总结

    自学习面向对象程序设计语言以来,深深体会到这种语言的魅力。与面向过程设计语言相比,随着学习的深入,两者的风格不一更加凸显。面向过程程序设计语言,典型的有C语言、C++,面向过程是一种以过程... 查看详情

面向对象的程序设计(代码片段)

一、什么是面向对象  面向对象编程是一种编程方式,使用“类”和“对象”来实现,所以,面向对象编程就是对“类”和“对象”的使用。  面向对象编程核心就是“对象”二字,“对象”是特征与技能的结合体。“类”... 查看详情

面向对象简述

 一、面向对象是一种现在最为流行的程序设计方法,几乎现在的所有应用都以面向对象为主了,最早的面向对象的概念实际上是由IBM提出的,在70年代的Smaltalk语言之中进行了应用,后来根据面向对象的设计思路,才形成C++... 查看详情

[6]面向对象编程

...面向对象编程——ObjectOrientedProgramming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行... 查看详情