zoukankan      html  css  js  c++  java
  • 《面向对象程序设计(java)》第七周学习总结

    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("我是TEST1private修饰符修饰的方法");

    }

    public void tese2() {

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

    }

    protected void tese3() {

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

    }

    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("我是TEST2public修饰符修饰的方法");

    }

    private void demo2() {

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

    }

    protected void demo3() {

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

    }

    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属性,结合程序运行结果理解继承和权限修饰符的用法与区别*/

    }

    }

    实验代码:

     1 package test1;
     2 
     3 public class Main {
     4     public static void main(String[] args) {
     5         TEST2 test2=new TEST2();
     6         test2.demo1();
     7         test2.demo3();
     8         test2.demo4();
     9         test2.tese2();
    10         test2.tese3();
    11         test2.tese4();
    12         System.out.println(test2.e2);
    13         System.out.println(test2.e3);
    14         System.out.println(test2.e4);
    15         System.out.println(test2.t2);
    16         System.out.println(test2.t3);
    17         System.out.println(test2.t4);
    18     }
    19 }
     1 package test1;
     2 
     3 public class TEST1 {
     4     private String t1="这是TEST1的私有属性";
     5     public String t2="这是TEST2的公有属性";
     6     protected String t3="这是TEST1受保护的属性";
     7     String t4="这是TEST1的默认属性";
     8     private void tese1() {
     9         System.out.println("我是TEST1用private修饰符修饰的方法 ");
    10     }
    11     public void tese2() {
    12         System.out.println("我是TEST1用public修饰符修饰的方法");
    13     }
    14     protected void tese3() {
    15         System.out.println("我是TEST1用protected修饰符修饰的方法");
    16     }
    17     void tese4() {
    18         System.out.println("我是TEST1无修饰符修饰的方法");
    19     }
    20 }
     1 package test1;
     2 
     3 public class TEST2 extends TEST1 {
     4     private String e1="这是TEST2的私有属性";
     5     public String e2="这是TEST2的公有属性";
     6     protected String e3="这是TEST2受保护的属性";
     7     String e4="这是TEST2的默认属性";
     8     public void demo1() {
     9         System.out.println("我是TEST2用public修饰符修饰的方法");
    10     }
    11     private void demo2() {
    12         System.out.println("我是TEST2用private修饰符修饰的方法");
    13     }
    14     protected void demo3() {
    15         System.out.println("我是TEST2用protected修饰符修饰的方法");
    16     }
    17     void demo4() {
    18         System.out.println("我是TEST2无修饰符修饰的方法");
    19     }
    20 }

    实验结果:

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

    测试程序1:

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

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

    实验代码:

     1 package equals;
     2 
     3 /**
     4  * This program demonstrates the equals method.
     5  * @version 1.12 2012-01-26
     6  * @author Cay Horstmann
     7  */
     8 public class EqualsTest
     9 {
    10    public static void main(String[] args)
    11    {
    12       Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
    13       Employee alice2 = alice1;
    14       Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
    15       Employee bob = new Employee("Bob Brandson", 50000, 1989, 10, 1);
    16 
    17       System.out.println("alice1 == alice2: " + (alice1 == alice2));
    18 
    19       System.out.println("alice1 == alice3: " + (alice1 == alice3));
    20 
    21       System.out.println("alice1.equals(alice3): " + alice1.equals(alice3));
    22 
    23       System.out.println("alice1.equals(bob): " + alice1.equals(bob));
    24 
    25       System.out.println("bob.toString(): " + bob);
    26 
    27       Manager carl = new Manager("Carl Cracker", 80000, 1987, 12, 15);
    28       Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);
    29       boss.setBonus(5000);
    30       System.out.println("boss.toString(): " + boss);
    31       System.out.println("carl.equals(boss): " + carl.equals(boss));
    32       System.out.println("alice1.hashCode(): " + alice1.hashCode());
    33       System.out.println("alice3.hashCode(): " + alice3.hashCode());
    34       System.out.println("bob.hashCode(): " + bob.hashCode());
    35       System.out.println("carl.hashCode(): " + carl.hashCode());
    36    }
    37 }
     1 package equals;
     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       // 快速检查对象是否相同 
    43       if (this == otherObject) return true;
    44 
    45       // 如果显式参数为空,则必须返回false
    46       if (otherObject == null) return false;
    47 
    48       // 如果类不匹配,它们就不能相等
    49 if (getClass() != otherObject.getClass()) return false; 50 51 // 现在我们知道另一个对象是非空雇员
    52 Employee other = (Employee) otherObject; 53 54 // 测试字段是否具有相同的值 55 return Objects.equals(name, other.name) && salary == other.salary && Objects.equals(hireDay, other.hireDay); 56 } 57 58 public int hashCode() 59 { 60 return Objects.hash(name, salary, hireDay); 61 } 62 63 public String toString() 64 { 65 return getClass().getName() + "[name=" + name + ",salary=" + salary + ",hireDay=" + hireDay 66 + "]"; 67 } 68 }
     1 package equals;
     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    public boolean equals(Object otherObject)
    25    {
    26       if (!super.equals(otherObject)) return false;
    27       Manager other = (Manager) otherObject;
    28       // super.equals检查这个和其他属于同一个类
    29 return bonus == other.bonus; 30 } 31 //获得散列码,看看是否相同 32 public int hashCode() 33 { 34 return java.util.Objects.hash(super.hashCode(), bonus); 35 } 36 37 public String toString() 38 { 39 return super.toString() + "[bonus=" + bonus + "]"; 40 } 41 }

    实验结果:

    测试程序2:

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

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

    实验代码:

     1 package arrayList;
     2 
     3 import java.util.*;
     4 
     5 /**
     6  * This program demonstrates the ArrayList class.
     7  * @version 1.11 2012-01-26
     8  * @author Cay Horstmann
     9  */
    10 public class ArrayListTest
    11 {
    12    public static void main(String[] args)
    13    {
    14       // 用三个雇员对象填充工作人员数组列表
    15 ArrayList<Employee> staff = new ArrayList<>(); 16 17 staff.add(new Employee("Carl Cracker", 75000, 1987, 12, 15)); 18 staff.add(new Employee("Harry Hacker", 50000, 1989, 10, 1)); 19 staff.add(new Employee("Tony Tester", 40000, 1990, 3, 15)); 20 21 // 把每个人的工资提高5% 22 for (Employee e : staff) 23 e.raiseSalary(5); 24 25 // 打印所有员工对象的信息
    26 for (Employee e : staff) 27 System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay=" 28 + e.getHireDay()); 29 } 30 }
     1 package arrayList;
     2 
     3 import java.time.*;
     4 
     5 public class Employee
     6 {
     7    private String name;
     8    private double salary;
     9    private LocalDate hireDay;
    10 
    11    public Employee(String name, double salary, int year, int month, int day)
    12    {
    13       this.name = name;
    14       this.salary = salary;
    15       hireDay = LocalDate.of(year, month, day);
    16    }
    17 
    18    public String getName()
    19    {
    20       return name;
    21    }
    22 
    23    public double getSalary()
    24    {
    25       return salary;
    26    }
    27 
    28    public LocalDate getHireDay()
    29    {
    30       return hireDay;
    31    }
    32 
    33    public void raiseSalary(double byPercent)
    34    {
    35       double raise = salary * byPercent / 100;
    36       salary += raise;
    37    }
    38 }

    实验结果:

    测试程序3:

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

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

    实验代码:

     1 package enums;
     2 
     3 import java.util.*;
     4 
     5 /**
     6  * This program demonstrates enumerated types.
     7  * @version 1.0 2004-05-24
     8  * @author Cay Horstmann
     9  */
    10 public class EnumTest
    11 {  
    12    public static void main(String[] args)
    13    {  
    14       Scanner in = new Scanner(System.in);
    15       System.out.print("Enter a size: (SMALL, MEDIUM, LARGE, EXTRA_LARGE) ");
    16       String input = in.next().toUpperCase();
    17       Size size = Enum.valueOf(Size.class, input);
    18       System.out.println("size=" + size);
    19       System.out.println("abbreviation=" + size.getAbbreviation());
    20       if (size == Size.EXTRA_LARGE)
    21          System.out.println("Good job--you paid attention to the _.");      
    22    }
    23 }
    24 
    25 enum Size
    26 {
    //枚举类的所有实例必须放在第一行显示。
    27 SMALL("S"), MEDIUM("M"), LARGE("L"), EXTRA_LARGE("XL"); 28 29 private Size(String abbreviation) { this.abbreviation = abbreviation; } 30 public String getAbbreviation() { return abbreviation; } 31 32 private String abbreviation; 33 }

    实验结果:

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

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

    实验总结:通过这次四个修饰符与三个类的实验,我掌握了四个修饰符的权限范围,了解了三个特殊类的含义及使用方法。但还是有许多细节上的理解不到位和不足,尤其是枚举类的定义和用法还没有完全理解和掌握,还需要努力实践练习以掌握枚举类的含义并巩固其他所学知识。

  • 相关阅读:
    poj 3321 Apple Tree
    hdu 1520 Anniversary party
    Light OJ 1089 Points in Segments (II)
    Timus 1018 Binary Apple Tree
    zoj 3299 Fall the Brick
    HFUT 1287 法默尔的农场
    Codeforces 159C String Manipulation 1.0
    GraphQL + React Apollo + React Hook 大型项目实战(32 个视频)
    使用 TypeScript & mocha & chai 写测试代码实战(17 个视频)
    GraphQL + React Apollo + React Hook + Express + Mongodb 大型前后端分离项目实战之后端(19 个视频)
  • 原文地址:https://www.cnblogs.com/bmwb/p/9785533.html
Copyright © 2011-2022 走看看