201871010134-周英杰《面向对象程序设计(java)》第七周学习总结

java

201871010134-周英杰《面向对象程序设计(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值

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类的方法

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:录入以下代码,结合程序运行结果了解方法的可变参数用法

 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

代码:

 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 }

 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 }

 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:

代码:

 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 }

 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:编程练习:参照输出样例补全程序,使程序输出结果与输出样例一致。

 1 public class Demo {

2

3 public static void main(String[] args) {

4

5 Son son = new Son();

6

7 son.method();

8

9 }

10

11 }

12

13 class Parent {

14

15 Parent() {

16

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

18

19 }

20

21 Parent(boolean b) {

22

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

24

25 }

26

27 public void method() {

28

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

30

31 }

32

33 }

34

35 class Son extends Parent {

36

37 //补全本类定义

38

39 }

结果:

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 }

结果:

二、实验总结

       通过这几周的学习,对继承类、抽象类以及多态有了大致的了解。但是后面的好多内容,好比枚举类等新知识,在学习理论知识时,掌握的本身就不太清楚。实验过程中就觉得自己太难了,感觉这门语言“玉女无瓜”。好在在做测试题的时候,那些结果吸引了我的兴趣,所以最终还是有恃无恐的把他搞完了(虽然有点烂)。对于编程题,那可是一窍不通,但是还是在我的刻苦拼命地不懈追求下,使出浑身解数,最终完美收工。

以上是 201871010134-周英杰《面向对象程序设计(java)》第七周学习总结 的全部内容, 来源链接: utcz.com/z/390519.html

回到顶部