201871010134-周英杰《面向对象程序设计(java)》第七周学习总结
Posted dlzyj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了201871010134-周英杰《面向对象程序设计(java)》第七周学习总结相关的知识,希望对你有一定的参考价值。
201871010134-周英杰《面向对象程序设计(java)》第七周学习总结
项目 | 内容 |
这个作业属于哪个课程 | https://www.cnblogs.com/nwnu-daizh/ |
这个作业的要求在哪里 | https://www.cnblogs.com/nwnu-daizh/p/11654436.html |
作业学习目标 |
|
一、实验内容和步骤
实验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 修饰。
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)》第七周学习总结的主要内容,如果未能解决你的问题,请参考以下文章
王燕 201771010126《面向对象程序设计(java)》第一周学习总结
20182324 2019-2020-1 《数据结构与面向对象程序设计》第4周学习总结